summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-10-14 17:14:16 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2009-10-14 17:14:16 (GMT)
commit403ce78872f6982b6ecaa96b94c88cbf0f1159e6 (patch)
treea817f003b83257955d7af4a8f12fe03782664890
parent919765a0950ffa3cb81a70c7223c6252f45b4d7f (diff)
downloadcpython-403ce78872f6982b6ecaa96b94c88cbf0f1159e6.zip
cpython-403ce78872f6982b6ecaa96b94c88cbf0f1159e6.tar.gz
cpython-403ce78872f6982b6ecaa96b94c88cbf0f1159e6.tar.bz2
Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
using byte values greater than 127. Patch by egreen.
-rw-r--r--Lib/test/test_bytes.py14
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/bytes_methods.c4
3 files changed, 11 insertions, 10 deletions
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index ad11686..e39b9ea 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 ecd9fc2..101487a 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 3bac2d1..6908eb8 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: