[Python-checkins] r59244 - in python/branches/release25-maint: Lib/test/test_bigmem.py Misc/NEWS Python/getargs.c

amaury.forgeotdarc python-checkins at python.org
Fri Nov 30 22:53:18 CET 2007


Author: amaury.forgeotdarc
Date: Fri Nov 30 22:53:17 2007
New Revision: 59244
Modified:
 python/branches/release25-maint/Lib/test/test_bigmem.py
 python/branches/release25-maint/Misc/NEWS
 python/branches/release25-maint/Python/getargs.c
Log:
Backport of r59241: str.decode fails on very long strings on 64bit platforms.
PyArgs_ParseTuple t# and w# formats truncated the lengths to 32bit.
Modified: python/branches/release25-maint/Lib/test/test_bigmem.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_bigmem.py	(original)
+++ python/branches/release25-maint/Lib/test/test_bigmem.py	Fri Nov 30 22:53:17 2007
@@ -65,13 +65,15 @@
 self.assertEquals(s.count('i'), 1)
 self.assertEquals(s.count('j'), 0)
 
- @bigmemtest(minsize=0, memuse=1)
+ @bigmemtest(minsize=_2G + 2, memuse=3)
 def test_decode(self, size):
- pass
+ s = '.' * size
+ self.assertEquals(len(s.decode('utf-8')), size)
 
- @bigmemtest(minsize=0, memuse=1)
+ @bigmemtest(minsize=_2G + 2, memuse=3)
 def test_encode(self, size):
- pass
+ s = u'.' * size
+ self.assertEquals(len(s.encode('utf-8')), size)
 
 @bigmemtest(minsize=_2G, memuse=2)
 def test_endswith(self, size):
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS	(original)
+++ python/branches/release25-maint/Misc/NEWS	Fri Nov 30 22:53:17 2007
@@ -12,6 +12,11 @@
 Core and builtins
 -----------------
 
+- Issue #1521: On 64bit platforms, using PyArgs_ParseTuple with the t# of w#
+ format code incorrectly truncated the length to an int, even when
+ PY_SSIZE_T_CLEAN is set. The str.decode method used to return incorrect
+ results with huge strings.
+
 - Issue #1445: Fix a SystemError when accessing the ``cell_contents`` 
 attribute of an empty cell object.
 
Modified: python/branches/release25-maint/Python/getargs.c
==============================================================================
--- python/branches/release25-maint/Python/getargs.c	(original)
+++ python/branches/release25-maint/Python/getargs.c	Fri Nov 30 22:53:17 2007
@@ -894,7 +894,8 @@
 		char **buffer;
 		const char *encoding;
 		PyObject *s;
-		int size, recode_strings;
+		Py_ssize_t size;
+		int recode_strings;
 
 		/* Get 'e' parameter: the encoding name */
 		encoding = (const char *)va_arg(*p_va, const char *);
@@ -1144,7 +1145,7 @@
 	case 'w': { /* memory buffer, read-write access */
 		void **p = va_arg(*p_va, void **);
 		PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
-		int count;
+		Py_ssize_t count;
 			
 		if (pb == NULL || 
 		 pb->bf_getwritebuffer == NULL ||
@@ -1166,7 +1167,7 @@
 	case 't': { /* 8-bit character buffer, read-only access */
 		char **p = va_arg(*p_va, char **);
 		PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
-		int count;
+		Py_ssize_t count;
 		
 		if (*format++ != '#')
 			return converterr(


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /