Skip to content

Commit 9d8a3b7

Browse files
[3.13] pythonGH-141312: Allow only integers to longrangeiter_setstate state (pythonGH-141317)
This fixes an assertion error when the new computed start is not an integer. (cherry picked from commit 10bec7c) Co-authored-by: Sergey Miryanov <[email protected]>
1 parent 9648eed commit 9d8a3b7

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

Lib/test/test_range.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,16 @@ def test_iterator_setstate(self):
470470
it.__setstate__(2**64 - 7)
471471
self.assertEqual(list(it), [12, 10])
472472

473+
def test_iterator_invalid_setstate(self):
474+
for invalid_value in (1.0, ""):
475+
ranges = (('rangeiter', range(10, 100, 2)),
476+
('longrangeiter', range(10, 2**65, 2)))
477+
for rng_name, rng in ranges:
478+
with self.subTest(invalid_value=invalid_value, range=rng_name):
479+
it = iter(rng)
480+
with self.assertRaises(TypeError):
481+
it.__setstate__(invalid_value)
482+
473483
def test_odd_bug(self):
474484
# This used to raise a "SystemError: NULL result without error"
475485
# because the range validation step was eating the exception
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix the assertion failure in the ``__setstate__`` method of the range iterator
2+
when a non-integer argument is passed. Patch by Sergey Miryanov.

Objects/rangeobject.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,11 @@ longrangeiter_reduce(longrangeiterobject *r, PyObject *Py_UNUSED(ignored))
10141014
static PyObject *
10151015
longrangeiter_setstate(longrangeiterobject *r, PyObject *state)
10161016
{
1017+
if (!PyLong_CheckExact(state)) {
1018+
PyErr_Format(PyExc_TypeError, "state must be an int, not %T", state);
1019+
return NULL;
1020+
}
1021+
10171022
PyObject *zero = _PyLong_GetZero(); // borrowed reference
10181023
int cmp;
10191024

0 commit comments

Comments
 (0)