Skip to content

Commit 6e3bb8a

Browse files
authored
gh-126595: fix a crash when calling itertools.count(sys.maxsize) (#126617)
1 parent 37c57df commit 6e3bb8a

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

Lib/test/test_itertools.py

+8
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,8 @@ def test_count(self):
494494
self.assertEqual(take(2, zip('abc',count(-3))), [('a', -3), ('b', -2)])
495495
self.assertRaises(TypeError, count, 2, 3, 4)
496496
self.assertRaises(TypeError, count, 'a')
497+
self.assertEqual(take(3, count(maxsize)),
498+
[maxsize, maxsize + 1, maxsize + 2])
497499
self.assertEqual(take(10, count(maxsize-5)),
498500
list(range(maxsize-5, maxsize+5)))
499501
self.assertEqual(take(10, count(-maxsize-5)),
@@ -540,6 +542,12 @@ def test_count_with_step(self):
540542
self.assertEqual(take(20, count(-maxsize-15, 3)), take(20, range(-maxsize-15,-maxsize+100, 3)))
541543
self.assertEqual(take(3, count(10, maxsize+5)),
542544
list(range(10, 10+3*(maxsize+5), maxsize+5)))
545+
self.assertEqual(take(3, count(maxsize, 2)),
546+
[maxsize, maxsize + 2, maxsize + 4])
547+
self.assertEqual(take(3, count(maxsize, maxsize)),
548+
[maxsize, 2 * maxsize, 3 * maxsize])
549+
self.assertEqual(take(3, count(-maxsize, maxsize)),
550+
[-maxsize, 0, maxsize])
543551
self.assertEqual(take(3, count(2, 1.25)), [2, 3.25, 4.5])
544552
self.assertEqual(take(3, count(2, 3.25-4j)), [2, 5.25-4j, 8.5-8j])
545553
self.assertEqual(take(3, count(Decimal('1.1'), Decimal('.1'))),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix a crash when instantiating :class:`itertools.count` with an initial
2+
count of :data:`sys.maxsize` on debug builds. Patch by Bénédikt Tran.

Modules/itertoolsmodule.c

+3
Original file line numberDiff line numberDiff line change
@@ -3291,6 +3291,9 @@ itertools_count_impl(PyTypeObject *type, PyObject *long_cnt,
32913291
PyErr_Clear();
32923292
fast_mode = 0;
32933293
}
3294+
else if (cnt == PY_SSIZE_T_MAX) {
3295+
fast_mode = 0;
3296+
}
32943297
}
32953298
} else {
32963299
cnt = 0;

0 commit comments

Comments
 (0)