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.
........
This commit is contained in:
Amaury Forgeot d'Arc 2009-01-12 23:58:21 +00:00
parent e5e298f875
commit f343e01c17
10 changed files with 47 additions and 67 deletions

View file

@ -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)