GeezerVison is showing github.com — [3.15] gh-159739: Preserve CJK codec state across chunk boundaries and callbacks (GH-160400) by gpshead · Pull Request #161069 · python/cpython
Conversation
gpshead
commented
Nov 1, 2026
•
edited by bedevere-app
Bot
Loading
Uh oh!
There was an error while loading. Please reload this page.
The HZ encoder can consume a tilde after writing only its first escape byte. A split ISO-2022 escape can exceed the incremental decoder’s pending buffer, and a reset can leave the previous character set selected. Reserve space for both HZ bytes before consuming the tilde, allow the full pending escape, and restore the initial ISO-2022 state on reset. Keep the native codec table and the active encoder error policy alive so replacing their Python owners cannot leave a codec using freed memory.
(cherry picked from commit a96fbdc)
Manual backport notes (3.15): the automated backport conflicted in multibytecodec_encode() because 3.15 predates the PyBytesWriter conversion (gh-155742). The ERROR_DECREF(errors) calls are added to the existing buf.outobj return and error paths instead; nothing else differs. test_multibytecodec and the CJK codec tests pass with -R 3:3. This is needed before the gh-160185 backport (GH-161067), whose new tests rely on the ISO-2022 reset fix here.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
…ies and callbacks (pythonGH-160400)
The HZ encoder can consume a tilde after writing only its first escape byte. A split ISO-2022 escape can exceed the incremental decoder’s pending buffer, and a reset can leave the previous character set selected. Reserve space for both HZ bytes before consuming the tilde, allow the full pending escape, and restore the initial ISO-2022 state on reset. Keep the native codec table and the active encoder error policy alive so replacing their Python owners cannot leave a codec using freed memory.
(cherry picked from commit a96fbdc)
Co-authored-by: Jelle Zijlstra <[email protected]>
This was referenced Nov 1, 2026
Uh oh!
There was an error while loading. Please reload this page.
Reviewers
corona10
Awaiting requested review from corona10
corona10 is a code owner
Uh oh!
There was an error while loading. Please reload this page.
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
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.