Skip to content

[3.14] gh-159739: Validate newline replacement in TextIOWrapper.write (GH-160191) - #160487

Open
jelle-openai wants to merge 1 commit into
python:3.14from
jelle-openai:jelle/codex/backport-160191-3.14
Open

jelle-openai wants to merge 1 commit into
python:3.14from
jelle-openai:jelle/codex/backport-160191-3.14

Conversation

@jelle-openai

@jelle-openai jelle-openai commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

A str subclass can override replace() and return a non-string while TextIOWrapper.write() translates newlines. The C implementation then treats the result as Unicode and can crash. Reject an invalid replacement with TypeError. Backport to 3.15 and 3.14; on 3.14, put the regression test in Lib/test/test_io.py.
(cherry picked from commit c6796a1)

Co-authored-by: Jelle Zijlstra jelle@openai.com

Backport of #160191 to 3.14.

Move the two regression tests into 3.14's Lib/test/test_io.py.

Ran test_io on a free-threaded 3.14 build, including invalid replacement results and callbacks that change the stream state.

….write (pythonGH-160191)

A str subclass can override replace() and return a non-string while TextIOWrapper.write() translates newlines. The C implementation then treats the result as Unicode and can crash. Reject an invalid replacement with TypeError. Backport to 3.15 and 3.14; on 3.14, put the regression test in Lib/test/test_io.py.
(cherry picked from commit c6796a1)

Co-authored-by: Jelle Zijlstra <jelle@openai.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant