#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?)
This commit is contained in:
parent
e7d8be80ba
commit
39fd672dfe
|
@ -1297,6 +1297,7 @@ class BuiltinTest(unittest.TestCase):
|
||||||
)
|
)
|
||||||
self.assertRaises(ValueError, unichr, sys.maxunicode+1)
|
self.assertRaises(ValueError, unichr, sys.maxunicode+1)
|
||||||
self.assertRaises(TypeError, unichr)
|
self.assertRaises(TypeError, unichr)
|
||||||
|
self.assertRaises((OverflowError, ValueError), unichr, 2**32)
|
||||||
|
|
||||||
# We don't want self in vars(), so these are static methods
|
# 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
|
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.
|
- Apply security patches from Apple.
|
||||||
|
|
||||||
- Issue #2542: Now that issubclass() may call arbitrary code, ensure that
|
- Issue #2542: Now that issubclass() may call arbitrary code, ensure that
|
||||||
|
|
|
@ -394,9 +394,9 @@ Return a string of one character with ordinal i; 0 <= i < 256.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_unichr(PyObject *self, PyObject *args)
|
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 NULL;
|
||||||
|
|
||||||
return PyUnicode_FromOrdinal(x);
|
return PyUnicode_FromOrdinal(x);
|
||||||
|
|
Loading…
Reference in New Issue