diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 36defb8a846..00aee028b18 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']) diff --git a/Misc/NEWS b/Misc/NEWS index b75ddf9034c..3bea977e706 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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 d75eb53e437..56071a0cce1 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; } }