diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-07-31 21:28:03 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-07-31 21:28:03 (GMT) |
commit | 39fd672dfe0bea76d0ae5823b864460757cb423b (patch) | |
tree | 291455c98dccac778c5780b1eb4b0cf5f0da3dca | |
parent | e7d8be80ba634fa15ece6f503c33592e0d333361 (diff) | |
download | cpython-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.py | 1 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Python/bltinmodule.c | 4 |
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 @@ -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); |