summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-07-22 12:03:09 (GMT)
committerGeorg Brandl <georg@python.org>2009-07-22 12:03:09 (GMT)
commit11a81b21518a263aea9642f29cbd9e78326982a6 (patch)
treef3b20581f6e4691fc4b24d4e23a49befc8e79cee
parent087d1a6d4b8659a9270eaec1154c151c0149f69c (diff)
downloadcpython-11a81b21518a263aea9642f29cbd9e78326982a6.zip
cpython-11a81b21518a263aea9642f29cbd9e78326982a6.tar.gz
cpython-11a81b21518a263aea9642f29cbd9e78326982a6.tar.bz2
Merged revisions 74167 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74167 | georg.brandl | 2009-07-22 13:57:15 +0200 (Mi, 22 Jul 2009) | 1 line Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. ........
-rw-r--r--Lib/test/test_builtin.py5
-rw-r--r--Misc/NEWS2
-rw-r--r--Objects/bytearrayobject.c9
3 files changed, 11 insertions, 5 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 6671f2c..910658d 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1469,6 +1469,11 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
+ def test_bytearray_translate(self):
+ x = bytearray("abc")
+ self.assertRaises(ValueError, x.translate, "1", 1)
+ self.assertRaises(TypeError, x.translate, "1"*256, 1)
+
class TestSorted(unittest.TestCase):
def test_basic(self):
diff --git a/Misc/NEWS b/Misc/NEWS
index e0cb38d..df3c2a5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.6.3
Core and Builtins
-----------------
+- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters.
+
- Issue #6070: On posix platforms import no longer copies the execute bit
from the .py file to the .pyc file if it is set.
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index b5dd81b..7eafce7 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -1458,15 +1458,14 @@ bytes_translate(PyByteArrayObject *self, PyObject *args)
if (vtable.len != 256) {
PyErr_SetString(PyExc_ValueError,
"translation table must be 256 characters long");
- result = NULL;
- goto done;
+ PyBuffer_Release(&vtable);
+ return NULL;
}
if (delobj != NULL) {
if (_getbuffer(delobj, &vdel) < 0) {
- result = NULL;
- delobj = NULL; /* don't try to release vdel buffer on exit */
- goto done;
+ PyBuffer_Release(&vtable);
+ return NULL;
}
}
else {