Issue #17223: array module: Fix a crasher when converting an array containing

invalid characters (outside range [U+0000; U+10ffff]) to Unicode: repr(array),
str(array) and array.tounicode(). Patch written by Manuel Jacob.
This commit is contained in:
Victor Stinner 2013-02-26 00:27:38 +01:00
parent d21b58c05d
commit 29ec595c6a
3 changed files with 12 additions and 0 deletions

View File

@ -1069,6 +1069,12 @@ class UnicodeTest(StringTest, unittest.TestCase):
self.assertRaises(TypeError, a.fromunicode) self.assertRaises(TypeError, a.fromunicode)
def test_issue17223(self):
# this used to crash
a = array.array('u', b'\xff' * 4)
self.assertRaises(ValueError, a.tounicode)
self.assertRaises(ValueError, str, a)
class NumberTest(BaseTest): class NumberTest(BaseTest):
def test_extslice(self): def test_extslice(self):

View File

@ -12,6 +12,10 @@ What's New in Python 3.3.1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #17223: array module: Fix a crasher when converting an array containing
invalid characters (outside range [U+0000; U+10ffff]) to Unicode:
repr(array), str(array) and array.tounicode(). Patch written by Manuel Jacob.
- Issue #17223: Fix PyUnicode_FromUnicode() for string of 1 character outside - Issue #17223: Fix PyUnicode_FromUnicode() for string of 1 character outside
the range U+0000-U+10ffff. the range U+0000-U+10ffff.

View File

@ -2180,6 +2180,8 @@ array_repr(arrayobject *a)
} else { } else {
v = array_tolist(a, NULL); v = array_tolist(a, NULL);
} }
if (v == NULL)
return NULL;
s = PyUnicode_FromFormat("array('%c', %R)", (int)typecode, v); s = PyUnicode_FromFormat("array('%c', %R)", (int)typecode, v);
Py_DECREF(v); Py_DECREF(v);