diff options
| author | Georg Brandl <georg@python.org> | 2009-07-22 12:03:59 (GMT) | 
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2009-07-22 12:03:59 (GMT) | 
| commit | 953152f0640d7c99b9ffe03392a4c9ce590489cb (patch) | |
| tree | fd4a8d794c249b3a96846d8427e8df0ca4bb0862 | |
| parent | 2f19bb1447ace998a375c96708a34058c2b4ffff (diff) | |
| download | cpython-953152f0640d7c99b9ffe03392a4c9ce590489cb.zip cpython-953152f0640d7c99b9ffe03392a4c9ce590489cb.tar.gz cpython-953152f0640d7c99b9ffe03392a4c9ce590489cb.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.py | 5 | ||||
| -rw-r--r-- | Misc/NEWS | 2 | ||||
| -rw-r--r-- | Objects/bytearrayobject.c | 8 | 
3 files changed, 12 insertions, 3 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 28fd938..cac4555 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1229,6 +1229,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(b"abc") +        self.assertRaises(ValueError, x.translate, b"1", 1) +        self.assertRaises(TypeError, x.translate, b"1"*256, 1) +  class TestSorted(unittest.TestCase):      def test_basic(self): @@ -12,6 +12,8 @@ What's New in Python 3.2 Alpha 1?  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 165fd10..f3d5697 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1389,15 +1389,17 @@ bytearray_translate(PyByteArrayObject *self, PyObject *args)          if (vtable.len != 256) {              PyErr_SetString(PyExc_ValueError,                              "translation table must be 256 characters long"); -            goto done; +            PyBuffer_Release(&vtable); +            return NULL;          }          table = (const char*)vtable.buf;      }      if (delobj != NULL) {          if (_getbuffer(delobj, &vdel) < 0) { -            delobj = NULL;  /* don't try to release vdel buffer on exit */ -            goto done; +            if (tableobj != NULL) +                PyBuffer_Release(&vtable); +            return NULL;          }      }      else {  | 
