From 1ad93a0c143af4213427c51e260954143c71ae08 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 2 Oct 2026 16:18:14 +0200 Subject: [PATCH] gh-158445: Skip invalid UCS-4 tests if Python is built with assertions If Python is built in release mode with assertions, PyUnicode_FromKindAndData() and PyUnicodeWriter_Finish() fail with an assertion error on invalid characters. --- Lib/test/test_capi/test_unicode.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_capi/test_unicode.py b/Lib/test/test_capi/test_unicode.py index c5926dce397409c..6e2fd13567f5fbe 100644 --- a/Lib/test/test_capi/test_unicode.py +++ b/Lib/test/test_capi/test_unicode.py @@ -315,6 +315,7 @@ def test_fromkindanddata(self): # Test invalid UCS-4 string. Create an invalid string in release mode, # or raise SystemError in debug mode. + built_with_assert = support.built_with_c_assertions() for invalid_char in (INVALID_CHAR, MAX_INVALID_CHAR): with self.subTest(invalid_char=invalid_char): # Test single character @@ -325,9 +326,12 @@ def test_fromkindanddata(self): s = 'valid'.encode(enc4) + ucs4_char if support.Py_DEBUG: self.assertRaises(SystemError, fromkindanddata, 4, s) - else: + elif not built_with_assert : result = fromkindanddata(4, s) assert_invalid_string(self, result) + else: + # PyUnicode_FromKindAndData() fails with an assertion error + pass def test_substring(self): """Test PyUnicode_Substring()""" @@ -2170,6 +2174,7 @@ def test_ucs4(self): # Invalid UCS-4 characters. Create an invalid string in release mode, # or raise SystemError in debug mode. + built_with_assert = support.built_with_c_assertions() writer = self.create_writer(0) for invalid_char in (INVALID_CHAR, MAX_INVALID_CHAR): with self.subTest(invalid_char=invalid_char): @@ -2189,9 +2194,12 @@ def test_ucs4(self): if support.Py_DEBUG: self.assertEqual(writer.finish(), '') - else: + elif not built_with_assert: result = writer.finish() assert_invalid_string(self, result) + else: + # PyUnicodeWriter_Finish() fails with an assertion error + pass # Invalid size writer = self.create_writer(0)