diff options
author | Armin Rigo <arigo@tunes.org> | 2008-08-29 21:21:52 (GMT) |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2008-08-29 21:21:52 (GMT) |
commit | dcde494114ebbecd50e5da1f89d47c73679ec615 (patch) | |
tree | ca8805daca14b11e0430a6aa44100296c5c31288 | |
parent | d4ae97bc38780aab5f348b73fee67eaab7546441 (diff) | |
download | cpython-dcde494114ebbecd50e5da1f89d47c73679ec615.zip cpython-dcde494114ebbecd50e5da1f89d47c73679ec615.tar.gz cpython-dcde494114ebbecd50e5da1f89d47c73679ec615.tar.bz2 |
A collection of crashers, all variants of the idea
of issue #3720.
-rw-r--r-- | Lib/test/crashers/iter.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Lib/test/crashers/iter.py b/Lib/test/crashers/iter.py new file mode 100644 index 0000000..081dcbc --- /dev/null +++ b/Lib/test/crashers/iter.py @@ -0,0 +1,53 @@ +# Calls to PyIter_Next, or direct calls to tp_iternext, on an object +# which might no longer be an iterable because its 'next' method was +# removed. These are all variants of Issue3720. + +""" +Run this script with an argument between 1 and <N> to test for +different crashes. +""" +N = 8 + +import sys + +class Foo(object): + def __iter__(self): + return self + def next(self): + del Foo.next + return (1, 2) + +def case1(): + list(enumerate(Foo())) + +def case2(): + x, y = Foo() + +def case3(): + filter(None, Foo()) + +def case4(): + map(None, Foo(), Foo()) + +def case5(): + max(Foo()) + +def case6(): + sum(Foo(), ()) + +def case7(): + dict(Foo()) + +def case8(): + sys.stdout.writelines(Foo()) + +# etc... + + +if __name__ == '__main__': + if len(sys.argv) < 2: + print __doc__.replace('<N>', str(N)) + else: + n = int(sys.argv[1]) + func = globals()['case%d' % n] + func() |