Skip to content

Commit 403ce78

Browse files
committed
Issue python#7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
using byte values greater than 127. Patch by egreen.
1 parent 919765a commit 403ce78

3 files changed

Lines changed: 11 additions & 10 deletions

File tree

Lib/test/test_bytes.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -454,8 +454,9 @@ def test_ord(self):
454454

455455
def test_maketrans(self):
456456
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'
457-
458457
self.assertEqual(self.type2test.maketrans(b'abc', b'xyz'), transtable)
458+
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'
459+
self.assertEqual(self.type2test.maketrans(b'\375\376\377', b'xyz'), transtable)
459460
self.assertRaises(ValueError, self.type2test.maketrans, b'abc', b'xyzq')
460461
self.assertRaises(TypeError, self.type2test.maketrans, 'abc', 'def')
461462

@@ -1074,13 +1075,10 @@ def __init__(self, newarg=1, *args, **kwargs):
10741075

10751076

10761077
def test_main():
1077-
test.support.run_unittest(BytesTest)
1078-
test.support.run_unittest(ByteArrayTest)
1079-
test.support.run_unittest(AssortedBytesTest)
1080-
test.support.run_unittest(BytesAsStringTest)
1081-
test.support.run_unittest(ByteArrayAsStringTest)
1082-
test.support.run_unittest(ByteArraySubclassTest)
1083-
test.support.run_unittest(BytearrayPEP3137Test)
1078+
test.support.run_unittest(
1079+
BytesTest, AssortedBytesTest, BytesAsStringTest,
1080+
ByteArrayTest, ByteArrayAsStringTest, ByteArraySubclassTest,
1081+
BytearrayPEP3137Test)
10841082

10851083
if __name__ == "__main__":
10861084
test_main()

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1?
1212
Core and Builtins
1313
-----------------
1414

15+
- Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
16+
using byte values greater than 127. Patch by egreen.
17+
1518
- Issue #1571184: The Unicode database contains properties for more characters.
1619
The tables for code points representing numeric values, white spaces or line
1720
breaks are now generated from the official Unicode Character Database files,

Objects/bytes_methods.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ _Py_bytes_maketrans(PyObject *args)
427427
{
428428
PyObject *frm, *to, *res = NULL;
429429
Py_buffer bfrm, bto;
430-
int i;
430+
Py_ssize_t i;
431431
char *p;
432432

433433
bfrm.len = -1;
@@ -452,7 +452,7 @@ _Py_bytes_maketrans(PyObject *args)
452452
for (i = 0; i < 256; i++)
453453
p[i] = i;
454454
for (i = 0; i < bfrm.len; i++) {
455-
p[(int)((char *)bfrm.buf)[i]] = ((char *)bto.buf)[i];
455+
p[((unsigned char *)bfrm.buf)[i]] = ((char *)bto.buf)[i];
456456
}
457457

458458
done:

0 commit comments

Comments
 (0)