diff options
| author | Georg Brandl <georg@python.org> | 2008-12-28 11:55:24 (GMT) |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2008-12-28 11:55:24 (GMT) |
| commit | ef29f8634ca5415fda7aa75c9c142d3eaf2edebc (patch) | |
| tree | 83747d92acba51003a7598774a1a71c81408803a | |
| parent | 828a7066f12e758c30829363c8ec9018c6c2a94f (diff) | |
| download | cpython-ef29f8634ca5415fda7aa75c9c142d3eaf2edebc.zip cpython-ef29f8634ca5415fda7aa75c9c142d3eaf2edebc.tar.gz cpython-ef29f8634ca5415fda7aa75c9c142d3eaf2edebc.tar.bz2 | |
Backport r67975: #4759: fix segfault in bytearray.translate(x, None).
| -rw-r--r-- | Lib/test/test_bytes.py | 8 | ||||
| -rw-r--r-- | Misc/NEWS | 2 | ||||
| -rw-r--r-- | Objects/bytearrayobject.c | 1 |
3 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 36defb8..00aee02 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -872,11 +872,19 @@ class AssortedBytesTest(unittest.TestCase): def test_translate(self): b = b'hello' + ba = bytearray(b) rosetta = bytearray(range(0, 256)) rosetta[ord('o')] = ord('e') c = b.translate(rosetta, b'l') self.assertEqual(b, b'hello') self.assertEqual(c, b'hee') + c = ba.translate(rosetta, b'l') + self.assertEqual(ba, b'hello') + self.assertEqual(c, b'hee') + c = b.translate(None, b'e') + self.assertEqual(c, b'hllo') + self.assertRaises(TypeError, b.translate, b'a'*256, None) + self.assertRaises(TypeError, ba.translate, b'a'*256, None) def test_split_bytearray(self): self.assertEqual(b'a b'.split(memoryview(b' ')), [b'a', b'b']) @@ -12,6 +12,8 @@ What's New in Python 2.6.2 Core and Builtins ----------------- +- Issue #4759: fix a segfault for bytearray.translate(x, None). + - Added test case to ensure attempts to read from a file opened for writing fail. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index d75eb53..56071a0 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1465,6 +1465,7 @@ bytes_translate(PyByteArrayObject *self, PyObject *args) if (delobj != NULL) { if (_getbuffer(delobj, &vdel) < 0) { result = NULL; + delobj = NULL; /* don't try to release vdel buffer on exit */ goto done; } } |
