mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #23985: Fixed integer overflow in iterator object. Patch by
Clement Rouault.
This commit is contained in:
parent
cbfe07e06c
commit
4faf5c5655
4 changed files with 34 additions and 0 deletions
|
@ -1,5 +1,6 @@
|
|||
# Test iterators.
|
||||
|
||||
import sys
|
||||
import unittest
|
||||
from test.support import run_unittest, TESTFN, unlink, cpython_only
|
||||
import pickle
|
||||
|
@ -48,6 +49,10 @@ class SequenceClass:
|
|||
else:
|
||||
raise IndexError
|
||||
|
||||
class UnlimitedSequenceClass:
|
||||
def __getitem__(self, i):
|
||||
return i
|
||||
|
||||
# Main test suite
|
||||
|
||||
class TestCase(unittest.TestCase):
|
||||
|
@ -919,6 +924,26 @@ class TestCase(unittest.TestCase):
|
|||
lst.extend(gen())
|
||||
self.assertEqual(len(lst), 760)
|
||||
|
||||
@cpython_only
|
||||
def test_iter_overflow(self):
|
||||
# Test for the issue 22939
|
||||
it = iter(UnlimitedSequenceClass())
|
||||
# Manually set `it_index` to PY_SSIZE_T_MAX-2 without a loop
|
||||
it.__setstate__(sys.maxsize - 2)
|
||||
self.assertEqual(next(it), sys.maxsize - 2)
|
||||
self.assertEqual(next(it), sys.maxsize - 1)
|
||||
with self.assertRaises(OverflowError):
|
||||
next(it)
|
||||
# Check that Overflow error is always raised
|
||||
with self.assertRaises(OverflowError):
|
||||
next(it)
|
||||
|
||||
def test_iter_neg_setstate(self):
|
||||
it = iter(UnlimitedSequenceClass())
|
||||
it.__setstate__(-42)
|
||||
self.assertEqual(next(it), 0)
|
||||
self.assertEqual(next(it), 1)
|
||||
|
||||
|
||||
def test_main():
|
||||
run_unittest(TestCase)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue