mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
A minor fix for 64-bit platforms: when __len__() returns Python int
containing a value that doesn't fit in a C int, raise OverflowError rather than truncating silently (and having 50% chance of hitting the "it should be >= 0" error).
This commit is contained in:
parent
3a703b6059
commit
ba3e6ec0c9
1 changed files with 11 additions and 1 deletions
|
@ -1013,7 +1013,17 @@ instance_length(PyInstanceObject *inst)
|
|||
if (res == NULL)
|
||||
return -1;
|
||||
if (PyInt_Check(res)) {
|
||||
outcome = PyInt_AsLong(res);
|
||||
long temp = PyInt_AsLong(res);
|
||||
outcome = (int)temp;
|
||||
#if SIZEOF_INT < SIZEOF_LONG
|
||||
/* Overflow check -- range of PyInt is more than C int */
|
||||
if (outcome != temp) {
|
||||
PyErr_SetString(PyExc_OverflowError,
|
||||
"__len__() should return 0 <= outcome < 2**32");
|
||||
outcome = -1;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (outcome < 0)
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"__len__() should return >= 0");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue