summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-07-31 21:28:03 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-07-31 21:28:03 (GMT)
commit39fd672dfe0bea76d0ae5823b864460757cb423b (patch)
tree291455c98dccac778c5780b1eb4b0cf5f0da3dca
parente7d8be80ba634fa15ece6f503c33592e0d333361 (diff)
downloadcpython-39fd672dfe0bea76d0ae5823b864460757cb423b.zip
cpython-39fd672dfe0bea76d0ae5823b864460757cb423b.tar.gz
cpython-39fd672dfe0bea76d0ae5823b864460757cb423b.tar.bz2
#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?)
-rw-r--r--Lib/test/test_builtin.py1
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/bltinmodule.c4
3 files changed, 7 insertions, 2 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 15d80a3..70980f8 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1297,6 +1297,7 @@ class BuiltinTest(unittest.TestCase):
)
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
diff --git a/Misc/NEWS b/Misc/NEWS
index 723d073..8aa006a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 2.6 beta 3?
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
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index e18eb2a..4a1ffd5 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -394,9 +394,9 @@ Return a string of one character with ordinal i; 0 <= i < 256.");
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);