Skip to content

[3.14] gh-158445: Detect invalid UCS4 characters in debug mode (#158502) (#159524) - #159540

Merged
vstinner merged 1 commit into
python:3.14from
vstinner:invalid14
Oct 16, 2026
Merged

vstinner merged 1 commit into
python:3.14from
vstinner:invalid14

Conversation

@vstinner

Copy link
Copy Markdown
Member

In debug mode, PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND) and PyUnicodeWriter_WriteUCS4() now raise a SystemError if a character is not in range [U+0000; U+10ffff], instead of creating an invalid str object.

In release mode, PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND) raises a SystemError if the size is 1.

  • In debug mode, unicode_char() no longer fails with an assertion error if the character is invalid. Instead, raise SystemError.
  • Add tests on invalid UCS-4 characters.
  • Add unicode_invalid_character() helper function.

(cherry picked from commit a14a4a6)

If Python is built in release mode with assertions, PyUnicode_FromKindAndData() and PyUnicodeWriter_Finish() fail with an assertion error on invalid characters.

(cherry picked from commit 35bdbca) (cherry picked from commit 2c23505)

…ython#158502) (python#159524)

* pythongh-158445: Detect invalid UCS4 characters in debug mode (python#158502)

In debug mode, PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND) and
PyUnicodeWriter_WriteUCS4() now raise a SystemError if a character is
not in range [U+0000; U+10ffff], instead of creating an invalid str
object.

In release mode, PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND)
raises a SystemError if the size is 1.

* In debug mode, unicode_char() no longer fails with an assertion
  error if the character is invalid. Instead, raise SystemError.
* Add tests on invalid UCS-4 characters.
* Add unicode_invalid_character() helper function.

(cherry picked from commit a14a4a6)

* pythongh-158445: Skip invalid UCS-4 tests if Python is built with assertions (python#158604)

If Python is built in release mode with assertions,
PyUnicode_FromKindAndData() and PyUnicodeWriter_Finish() fail with an
assertion error on invalid characters.

(cherry picked from commit 35bdbca)
(cherry picked from commit 2c23505)
@vstinner
vstinner merged commit 09a7956 into python:3.14 Oct 16, 2026
52 of 53 checks passed
@vstinner
vstinner deleted the invalid14 branch October 16, 2026 15:26
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