]> granicus.if.org Git - python/commitdiff
Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
authorAntoine Pitrou <solipsis@pitrou.net>
Wed, 14 Oct 2009 17:14:16 +0000 (17:14 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Wed, 14 Oct 2009 17:14:16 +0000 (17:14 +0000)
using byte values greater than 127.  Patch by egreen.

Lib/test/test_bytes.py
Misc/NEWS
Objects/bytes_methods.c

index ad11686fce1c819a1eee0f513279949d50d13641..e39b9ead83318ccbe3a6fb908eae14fc367f92d5 100644 (file)
@@ -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()
index ecd9fc209c465209af7556cbb7936a484926c90f..101487ac83a8549dd66851de8353dc24b0e6d161 100644 (file)
--- 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,
index 3bac2d15eb10d0da7ca08e66e3b94d50142cfc7c..6908eb853f9f2e73d3d3ae2a9af37df64b79636a 100644 (file)
@@ -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: