[Python-Dev] Bad interaction of __index__ and sequence repeat

Armin Rigo arigo at tunes.org
Fri Jul 28 12:11:33 CEST 2006


Hi,

There is an oversight in the design of __index__() that only just
surfaced :-(  It is responsible for the following behavior, on a 32-bit
machine with >= 2GB of RAM:

    >>> s = 'x' * (2**100)       # works!
    >>> len(s)
    2147483647

This is because PySequence_Repeat(v, w) works by applying w.__index__ in
order to call v->sq_repeat.  However, __index__ is defined to clip the
result to fit in a Py_ssize_t.  This means that the above problem exists
with all sequences, not just strings, given enough RAM to create such
sequences with 2147483647 items.

For reference, in 2.4 we correctly get an OverflowError.

Argh!  What should be done about it?


A bientot,

Armin.


More information about the Python-Dev mailing list