Skip to content

[3.15] gh-159739: Preserve CJK codec state across chunk boundaries and callbacks (GH-160400) - #161069

Merged
gpshead merged 1 commit into
python:3.15from
gpshead:backport-a96fbdc-3.15
Nov 1, 2026
Merged

gpshead merged 1 commit into
python:3.15from
gpshead:backport-a96fbdc-3.15

Conversation

@gpshead

@gpshead gpshead commented Nov 1, 2026 •

Copy link
Copy Markdown
Member

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.

…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 <jelle@openai.com>
@gpshead
gpshead requested a review from corona10 as a code owner November 1, 2026 07:03
@gpshead
gpshead enabled auto-merge (squash) November 1, 2026 07:04
@gpshead gpshead self-assigned this Nov 1, 2026
@gpshead
gpshead merged commit 06367c6 into python:3.15 Nov 1, 2026
59 checks passed
@gpshead
gpshead deleted the backport-a96fbdc-3.15 branch November 1, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants