[Python-checkins] cpython (3.4): bail in unicode error's __str__ methods if the objects are not properly
benjamin.peterson
python-checkins at python.org
Wed Apr 2 18:17:08 CEST 2014
http://hg.python.org/cpython/rev/140c5da3dc82
changeset: 90110:140c5da3dc82
branch: 3.4
parent: 90108:6185b71bdc1c
user: Benjamin Peterson <benjamin at python.org>
date: Wed Apr 02 12:15:06 2014 -0400
summary:
bail in unicode error's __str__ methods if the objects are not properly initialized (closes #21134)
files:
Lib/test/test_exceptions.py | 6 ++++++
Misc/NEWS | 3 +++
Objects/exceptions.c | 12 ++++++++++++
3 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -800,6 +800,12 @@
u.start = 1000
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
def test_badisinstance(self):
# Bug #2542: if issubclass(e, MyException) raises an exception,
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
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
Andreas Schwab.
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -1837,6 +1837,10 @@
PyObject *reason_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
they've been modified after we were contructed. */
reason_str = PyObject_Str(uself->reason);
@@ -1955,6 +1959,10 @@
PyObject *reason_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
they've been modified after we were contructed. */
reason_str = PyObject_Str(uself->reason);
@@ -2049,6 +2057,10 @@
PyObject *result = 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
modified after we were contructed. */
reason_str = PyObject_Str(uself->reason);
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list