mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
bail in unicode error's __str__ methods if the objects are not properly initialized (closes #21134)
This commit is contained in:
parent
24dfb05d4f
commit
9b09ba1234
3 changed files with 21 additions and 0 deletions
|
@ -800,6 +800,12 @@ class ExceptionTests(unittest.TestCase):
|
||||||
u.start = 1000
|
u.start = 1000
|
||||||
self.assertEqual(str(u), "can't translate characters in position 1000-4: 965230951443685724997")
|
self.assertEqual(str(u), "can't translate characters in position 1000-4: 965230951443685724997")
|
||||||
|
|
||||||
|
def test_unicode_errors_no_object(self):
|
||||||
|
# See issue #21134.
|
||||||
|
klasses = UnicodeDecodeError, UnicodeDecodeError, UnicodeTranslateError
|
||||||
|
for klass in klasses:
|
||||||
|
self.assertEqual(str(klass.__new__(klass)), "")
|
||||||
|
|
||||||
@no_tracing
|
@no_tracing
|
||||||
def test_badisinstance(self):
|
def test_badisinstance(self):
|
||||||
# Bug #2542: if issubclass(e, MyException) raises an exception,
|
# Bug #2542: if issubclass(e, MyException) raises an exception,
|
||||||
|
|
|
@ -10,6 +10,9 @@ Release date: TBA
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #21134: Fix segfault when str is called on an uninitialized
|
||||||
|
UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object.
|
||||||
|
|
||||||
- Issue #19537: Fix PyUnicode_DATA() alignment under m68k. Patch by
|
- Issue #19537: Fix PyUnicode_DATA() alignment under m68k. Patch by
|
||||||
Andreas Schwab.
|
Andreas Schwab.
|
||||||
|
|
||||||
|
|
|
@ -1837,6 +1837,10 @@ UnicodeEncodeError_str(PyObject *self)
|
||||||
PyObject *reason_str = NULL;
|
PyObject *reason_str = NULL;
|
||||||
PyObject *encoding_str = NULL;
|
PyObject *encoding_str = NULL;
|
||||||
|
|
||||||
|
if (!uself->object)
|
||||||
|
/* Not properly initialized. */
|
||||||
|
return PyUnicode_FromString("");
|
||||||
|
|
||||||
/* Get reason and encoding as strings, which they might not be if
|
/* Get reason and encoding as strings, which they might not be if
|
||||||
they've been modified after we were contructed. */
|
they've been modified after we were contructed. */
|
||||||
reason_str = PyObject_Str(uself->reason);
|
reason_str = PyObject_Str(uself->reason);
|
||||||
|
@ -1955,6 +1959,10 @@ UnicodeDecodeError_str(PyObject *self)
|
||||||
PyObject *reason_str = NULL;
|
PyObject *reason_str = NULL;
|
||||||
PyObject *encoding_str = NULL;
|
PyObject *encoding_str = NULL;
|
||||||
|
|
||||||
|
if (!uself->object)
|
||||||
|
/* Not properly initialized. */
|
||||||
|
return PyUnicode_FromString("");
|
||||||
|
|
||||||
/* Get reason and encoding as strings, which they might not be if
|
/* Get reason and encoding as strings, which they might not be if
|
||||||
they've been modified after we were contructed. */
|
they've been modified after we were contructed. */
|
||||||
reason_str = PyObject_Str(uself->reason);
|
reason_str = PyObject_Str(uself->reason);
|
||||||
|
@ -2049,6 +2057,10 @@ UnicodeTranslateError_str(PyObject *self)
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
PyObject *reason_str = NULL;
|
PyObject *reason_str = NULL;
|
||||||
|
|
||||||
|
if (!uself->object)
|
||||||
|
/* Not properly initialized. */
|
||||||
|
return PyUnicode_FromString("");
|
||||||
|
|
||||||
/* Get reason as a string, which it might not be if it's been
|
/* Get reason as a string, which it might not be if it's been
|
||||||
modified after we were contructed. */
|
modified after we were contructed. */
|
||||||
reason_str = PyObject_Str(uself->reason);
|
reason_str = PyObject_Str(uself->reason);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue