Kaydet (Commit) d4774fb6 authored tarafından Guido van Rossum's avatar Guido van Rossum

Untested code for 64-bit platforms. range_length() is declared as int

but returns r->len which is a long.  This doesn't even cause a warning
on 32-bit platforms, but can return bogus values on 64-bit platforms
(and should cause a compiler warning).  Fix this by inserting a range
check when LONG_MAX != INT_MAX, and adding an explicit cast to (int)
when the test passes.  When r->len is out of range, PySequence_Size()
and hence len() will report an error (but an iterator will still
work).
üst 02ff6a99
......@@ -130,7 +130,14 @@ range_item(rangeobject *r, int i)
static int
range_length(rangeobject *r)
{
return r->len;
#if LONG_MAX != INT_MAX
if (r->len > INT_MAX) {
PyErr_SetString(PyExc_ValueError,
"xrange object size cannot be reported");
return -1;
}
#endif
return (int)(r->len);
}
static PyObject *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment