From: Antoine Pitrou Date: Wed, 14 Oct 2009 17:14:16 +0000 (+0000) Subject: Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when X-Git-Tag: v3.2a1~2396 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=403ce78872f6982b6ecaa96b94c88cbf0f1159e6;p=thirdparty%2FPython%2Fcpython.git Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when using byte values greater than 127. Patch by egreen. --- diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index ad11686fce1c..e39b9ead8331 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -454,8 +454,9 @@ class BaseBytesTest(unittest.TestCase): def test_maketrans(self): transtable = b'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377' - self.assertEqual(self.type2test.maketrans(b'abc', b'xyz'), transtable) + transtable = b'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374xyz' + self.assertEqual(self.type2test.maketrans(b'\375\376\377', b'xyz'), transtable) self.assertRaises(ValueError, self.type2test.maketrans, b'abc', b'xyzq') self.assertRaises(TypeError, self.type2test.maketrans, 'abc', 'def') @@ -1074,13 +1075,10 @@ class ByteArraySubclassTest(unittest.TestCase): def test_main(): - test.support.run_unittest(BytesTest) - test.support.run_unittest(ByteArrayTest) - test.support.run_unittest(AssortedBytesTest) - test.support.run_unittest(BytesAsStringTest) - test.support.run_unittest(ByteArrayAsStringTest) - test.support.run_unittest(ByteArraySubclassTest) - test.support.run_unittest(BytearrayPEP3137Test) + test.support.run_unittest( + BytesTest, AssortedBytesTest, BytesAsStringTest, + ByteArrayTest, ByteArrayAsStringTest, ByteArraySubclassTest, + BytearrayPEP3137Test) if __name__ == "__main__": test_main() diff --git a/Misc/NEWS b/Misc/NEWS index ecd9fc209c46..101487ac83a8 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1? Core and Builtins ----------------- +- Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when + using byte values greater than 127. Patch by egreen. + - Issue #1571184: The Unicode database contains properties for more characters. The tables for code points representing numeric values, white spaces or line breaks are now generated from the official Unicode Character Database files, diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c index 3bac2d15eb10..6908eb853f9f 100644 --- a/Objects/bytes_methods.c +++ b/Objects/bytes_methods.c @@ -427,7 +427,7 @@ _Py_bytes_maketrans(PyObject *args) { PyObject *frm, *to, *res = NULL; Py_buffer bfrm, bto; - int i; + Py_ssize_t i; char *p; bfrm.len = -1; @@ -452,7 +452,7 @@ _Py_bytes_maketrans(PyObject *args) for (i = 0; i < 256; i++) p[i] = i; for (i = 0; i < bfrm.len; i++) { - p[(int)((char *)bfrm.buf)[i]] = ((char *)bto.buf)[i]; + p[((unsigned char *)bfrm.buf)[i]] = ((char *)bto.buf)[i]; } done: