mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
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:
parent
e5e298f875
commit
f343e01c17
10 changed files with 47 additions and 67 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue