summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_iter.py
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-01-12 23:58:21 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-01-12 23:58:21 (GMT)
commitf343e01c170b3f63eafac4568d905be91b676254 (patch)
tree1c3aa5615718e7ccc70be59a5fbd72b7497869ae /Lib/test/test_iter.py
parente5e298f8755c475e78f8cfc71ee0ea03c6674406 (diff)
downloadcpython-f343e01c170b3f63eafac4568d905be91b676254.zip
cpython-f343e01c170b3f63eafac4568d905be91b676254.tar.gz
cpython-f343e01c170b3f63eafac4568d905be91b676254.tar.bz2
Merged revisions 68560 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r68560 | amaury.forgeotdarc | 2009-01-13 00:36:55 +0100 (mar., 13 janv. 2009) | 6 lines #3720: Interpreter crashes when an evil iterator removes its own next function. Now the slot is filled with a function that always raises. Will not backport: extensions compiled with 2.6.x would not run on 2.6.0. ........
Diffstat (limited to 'Lib/test/test_iter.py')
-rw-r--r--Lib/test/test_iter.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index eba9728..7788502 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -120,6 +120,13 @@ class TestCase(unittest.TestCase):
def test_seq_class_iter(self):
self.check_iterator(iter(SequenceClass(10)), list(range(10)))
+ # Test a new_style class with __iter__ but no next() method
+ def test_new_style_iter_class(self):
+ class IterClass(object):
+ def __iter__(self):
+ return self
+ self.assertRaises(TypeError, iter, IterClass())
+
# Test two-argument iter() with callable instance
def test_iter_callable(self):
class C:
@@ -853,6 +860,21 @@ class TestCase(unittest.TestCase):
self.assertEqual(list(b), list(zip(range(5), range(5))))
self.assertEqual(list(b), [])
+ def test_3720(self):
+ # Avoid a crash, when an iterator deletes its next() method.
+ class BadIterator(object):
+ def __iter__(self):
+ return self
+ def __next__(self):
+ del BadIterator.__next__
+ return 1
+
+ try:
+ for i in BadIterator() :
+ pass
+ except TypeError:
+ pass
+
def test_main():
run_unittest(TestCase)