diff options
author | Bénédikt Tran <10796600+picnixz@users.noreply.github.com> | 2024-10-08 13:37:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-08 13:37:59 +0200 |
commit | ba14dfafd97d1fd03938ac8ddec4ca5b2f12985d (patch) | |
tree | fe2735d7b7d1dbcec3f0bd4e255b26e9a7b0bf00 /Lib/test/test_exceptions.py | |
parent | 19984fe024bfd90649f1c36b78c9abf3ed72b27d (diff) | |
download | cpython-ba14dfafd97d1fd03938ac8ddec4ca5b2f12985d.tar.gz cpython-ba14dfafd97d1fd03938ac8ddec4ca5b2f12985d.zip |
gh-123378: fix a crash in `UnicodeError.__str__` (#124935)
Diffstat (limited to 'Lib/test/test_exceptions.py')
-rw-r--r-- | Lib/test/test_exceptions.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index ba858c49400..b3c21cd4f3d 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -8,6 +8,7 @@ import pickle import weakref import errno from codecs import BOM_UTF8 +from itertools import product from textwrap import dedent from test.support import (captured_stderr, check_impl_detail, @@ -1336,6 +1337,29 @@ class ExceptionTests(unittest.TestCase): for klass in klasses: self.assertEqual(str(klass.__new__(klass)), "") + def test_unicode_error_str_does_not_crash(self): + # Test that str(UnicodeError(...)) does not crash. + # See https://github.com/python/cpython/issues/123378. + + for start, end, objlen in product( + range(-5, 5), + range(-5, 5), + range(7), + ): + obj = 'a' * objlen + with self.subTest('encode', objlen=objlen, start=start, end=end): + exc = UnicodeEncodeError('utf-8', obj, start, end, '') + self.assertIsInstance(str(exc), str) + + with self.subTest('translate', objlen=objlen, start=start, end=end): + exc = UnicodeTranslateError(obj, start, end, '') + self.assertIsInstance(str(exc), str) + + encoded = obj.encode() + with self.subTest('decode', objlen=objlen, start=start, end=end): + exc = UnicodeDecodeError('utf-8', encoded, start, end, '') + self.assertIsInstance(str(exc), str) + @no_tracing def test_badisinstance(self): # Bug #2542: if issubclass(e, MyException) raises an exception, |