[Python-checkins] r75404 - in python/branches/py3k: Lib/test/test_bytes.py Misc/NEWS Objects/bytes_methods.c

antoine.pitrou python-checkins at python.org
Wed Oct 14 19:14:16 CEST 2009


Author: antoine.pitrou
Date: Wed Oct 14 19:14:16 2009
New Revision: 75404

Log:
Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
using byte values greater than 127.  Patch by egreen.
 



Modified:
   python/branches/py3k/Lib/test/test_bytes.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Objects/bytes_methods.c

Modified: python/branches/py3k/Lib/test/test_bytes.py
==============================================================================
--- python/branches/py3k/Lib/test/test_bytes.py	(original)
+++ python/branches/py3k/Lib/test/test_bytes.py	Wed Oct 14 19:14:16 2009
@@ -454,8 +454,9 @@
 
     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 @@
 
 
 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()

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Wed Oct 14 19:14:16 2009
@@ -12,6 +12,9 @@
 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,

Modified: python/branches/py3k/Objects/bytes_methods.c
==============================================================================
--- python/branches/py3k/Objects/bytes_methods.c	(original)
+++ python/branches/py3k/Objects/bytes_methods.c	Wed Oct 14 19:14:16 2009
@@ -427,7 +427,7 @@
 {
 	PyObject *frm, *to, *res = NULL;
 	Py_buffer bfrm, bto;
-	int i;
+	Py_ssize_t i;
 	char *p;
 
 	bfrm.len = -1;
@@ -452,7 +452,7 @@
 	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:


More information about the Python-checkins mailing list