[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