[Python-checkins] r65339 - in python/trunk: Lib/test/test_builtin.py Misc/NEWS Python/bltinmodule.c

amaury.forgeotdarc python-checkins at python.org
Thu Jul 31 23:28:04 CEST 2008


Author: amaury.forgeotdarc
Date: Thu Jul 31 23:28:03 2008
New Revision: 65339

Log:
#3479: unichr(2**32) used to return u'\x00'.
The argument was fetched in a long, but PyUnicode_FromOrdinal takes an int.

(why doesn't gcc issue a truncation warning in this case?)


Modified:
   python/trunk/Lib/test/test_builtin.py
   python/trunk/Misc/NEWS
   python/trunk/Python/bltinmodule.c

Modified: python/trunk/Lib/test/test_builtin.py
==============================================================================
--- python/trunk/Lib/test/test_builtin.py	(original)
+++ python/trunk/Lib/test/test_builtin.py	Thu Jul 31 23:28:03 2008
@@ -1297,6 +1297,7 @@
             )
             self.assertRaises(ValueError, unichr, sys.maxunicode+1)
             self.assertRaises(TypeError, unichr)
+            self.assertRaises((OverflowError, ValueError), unichr, 2**32)
 
     # We don't want self in vars(), so these are static methods
 

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Thu Jul 31 23:28:03 2008
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- Issue #3479: On platforms where sizeof(int) is smaller than sizeof(long)
+  (64bit Unix, for example), unichr() would truncate its argument and return
+  u'\x00' for unichr(2**32). Now it properly raises an OverflowError.
+
 - Apply security patches from Apple.
 
 - Issue #2542: Now that issubclass() may call arbitrary code, ensure that

Modified: python/trunk/Python/bltinmodule.c
==============================================================================
--- python/trunk/Python/bltinmodule.c	(original)
+++ python/trunk/Python/bltinmodule.c	Thu Jul 31 23:28:03 2008
@@ -394,9 +394,9 @@
 static PyObject *
 builtin_unichr(PyObject *self, PyObject *args)
 {
-	long x;
+	int x;
 
-	if (!PyArg_ParseTuple(args, "l:unichr", &x))
+	if (!PyArg_ParseTuple(args, "i:unichr", &x))
 		return NULL;
 
 	return PyUnicode_FromOrdinal(x);


More information about the Python-checkins mailing list