Backport r67975: #4759: fix segfault in bytearray.translate(x, None).
This commit is contained in:
parent
828a7066f1
commit
ef29f8634c
|
@ -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'])
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue