Backport r67975: #4759: fix segfault in bytearray.translate(x, None).

This commit is contained in:
Georg Brandl 2008-12-28 11:55:24 +00:00
parent 828a7066f1
commit ef29f8634c
3 changed files with 11 additions and 0 deletions

View File

@ -872,11 +872,19 @@ class AssortedBytesTest(unittest.TestCase):
def test_translate(self): def test_translate(self):
b = b'hello' b = b'hello'
ba = bytearray(b)
rosetta = bytearray(range(0, 256)) rosetta = bytearray(range(0, 256))
rosetta[ord('o')] = ord('e') rosetta[ord('o')] = ord('e')
c = b.translate(rosetta, b'l') c = b.translate(rosetta, b'l')
self.assertEqual(b, b'hello') self.assertEqual(b, b'hello')
self.assertEqual(c, b'hee') 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): def test_split_bytearray(self):
self.assertEqual(b'a b'.split(memoryview(b' ')), [b'a', b'b']) self.assertEqual(b'a b'.split(memoryview(b' ')), [b'a', b'b'])

View File

@ -12,6 +12,8 @@ What's New in Python 2.6.2
Core and Builtins 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 - Added test case to ensure attempts to read from a file opened for writing
fail. fail.

View File

@ -1465,6 +1465,7 @@ bytes_translate(PyByteArrayObject *self, PyObject *args)
if (delobj != NULL) { if (delobj != NULL) {
if (_getbuffer(delobj, &vdel) < 0) { if (_getbuffer(delobj, &vdel) < 0) {
result = NULL; result = NULL;
delobj = NULL; /* don't try to release vdel buffer on exit */
goto done; goto done;
} }
} }