Repository navigation
Conversation
Write both bytes of the escape before consuming the input character, so that a retry after the output buffer is enlarged starts at the tilde.
gpshead
marked this pull request as ready for review
October 23, 2026 22:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
hz_encode()wrote the first byte of the~~escape, consumed the input character, and only then wrote the second byte. When the output buffer was full at that point,multibytecodec_encode()enlarged it and resumed at the next character, so the second~was lost. The escape is now written withWRITEBYTE2beforeNEXT(1, 2), like the other multi-byte writes in this file, so the retry starts at the tilde again.The test sweeps the text length across the initial buffer size and its first enlargement; it fails at 4 of the 120 lengths without the fix. Backports to branches older than 3.14 would need
assertEndsWithreplaced, but 3.14 and 3.15 have it.Fixes #160518
ANT-2026-FXW1XYKR
hzcodec encodes~as a single~when the output buffer fills mid-escape #160518