summaryrefslogtreecommitdiffstats
path: root/Lib/test/support
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-03-30 17:40:02 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-03-30 17:40:02 (GMT)
commitfbb1c5ee068d209e33f6e15ecb4821d5d8b107fa (patch)
tree4ae6657a598c5cfe5357f3106d956ed721d83e24 /Lib/test/support
parent13b3acd13e35b5e619c3d1aab90aaf54abc1fb53 (diff)
downloadcpython-fbb1c5ee068d209e33f6e15ecb4821d5d8b107fa.zip
cpython-fbb1c5ee068d209e33f6e15ecb4821d5d8b107fa.tar.gz
cpython-fbb1c5ee068d209e33f6e15ecb4821d5d8b107fa.tar.bz2
Issue #26494: Fixed crash on iterating exhausting iterators.
Affected classes are generic sequence iterators, iterators of str, bytes, bytearray, list, tuple, set, frozenset, dict, OrderedDict, corresponding views and os.scandir() iterator.
Diffstat (limited to 'Lib/test/support')
-rw-r--r--Lib/test/support/__init__.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index b82f9cb..e124fab 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -2366,3 +2366,22 @@ def run_in_subinterp(code):
"memory allocations")
import _testcapi
return _testcapi.run_in_subinterp(code)
+
+
+def check_free_after_iterating(test, iter, cls, args=()):
+ class A(cls):
+ def __del__(self):
+ nonlocal done
+ done = True
+ try:
+ next(it)
+ except StopIteration:
+ pass
+
+ done = False
+ it = iter(A(*args))
+ # Issue 26494: Shouldn't crash
+ test.assertRaises(StopIteration, next, it)
+ # The sequence should be deallocated just after the end of iterating
+ gc_collect()
+ test.assertTrue(done)