Commit ca1d3e5d authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when

using byte values greater than 127.  Patch by egreen.
parent 276357ad
...@@ -454,8 +454,9 @@ class BaseBytesTest(unittest.TestCase): ...@@ -454,8 +454,9 @@ class BaseBytesTest(unittest.TestCase):
def test_maketrans(self): 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' 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) 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(ValueError, self.type2test.maketrans, b'abc', b'xyzq')
self.assertRaises(TypeError, self.type2test.maketrans, 'abc', 'def') self.assertRaises(TypeError, self.type2test.maketrans, 'abc', 'def')
...@@ -1074,13 +1075,10 @@ class ByteArraySubclassTest(unittest.TestCase): ...@@ -1074,13 +1075,10 @@ class ByteArraySubclassTest(unittest.TestCase):
def test_main(): def test_main():
test.support.run_unittest(BytesTest) test.support.run_unittest(
test.support.run_unittest(ByteArrayTest) BytesTest, AssortedBytesTest, BytesAsStringTest,
test.support.run_unittest(AssortedBytesTest) ByteArrayTest, ByteArrayAsStringTest, ByteArraySubclassTest,
test.support.run_unittest(BytesAsStringTest) BytearrayPEP3137Test)
test.support.run_unittest(ByteArrayAsStringTest)
test.support.run_unittest(ByteArraySubclassTest)
test.support.run_unittest(BytearrayPEP3137Test)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
...@@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1? ...@@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1?
Core and Builtins 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. - Issue #1571184: The Unicode database contains properties for more characters.
The tables for code points representing numeric values, white spaces or line The tables for code points representing numeric values, white spaces or line
breaks are now generated from the official Unicode Character Database files, breaks are now generated from the official Unicode Character Database files,
......
...@@ -427,7 +427,7 @@ _Py_bytes_maketrans(PyObject *args) ...@@ -427,7 +427,7 @@ _Py_bytes_maketrans(PyObject *args)
{ {
PyObject *frm, *to, *res = NULL; PyObject *frm, *to, *res = NULL;
Py_buffer bfrm, bto; Py_buffer bfrm, bto;
int i; Py_ssize_t i;
char *p; char *p;
bfrm.len = -1; bfrm.len = -1;
...@@ -452,7 +452,7 @@ _Py_bytes_maketrans(PyObject *args) ...@@ -452,7 +452,7 @@ _Py_bytes_maketrans(PyObject *args)
for (i = 0; i < 256; i++) for (i = 0; i < 256; i++)
p[i] = i; p[i] = i;
for (i = 0; i < bfrm.len; 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: done:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment