/Lib/test/crashers/iter.py

http://unladen-swallow.googlecode.com/ · Python · 53 lines · 31 code · 14 blank · 8 comment · 3 complexity · 4822008d5b6240b83e1ecdce8ea4ec0a MD5 · raw file

  1. # Calls to PyIter_Next, or direct calls to tp_iternext, on an object
  2. # which might no longer be an iterable because its 'next' method was
  3. # removed. These are all variants of Issue3720.
  4. """
  5. Run this script with an argument between 1 and <N> to test for
  6. different crashes.
  7. """
  8. N = 8
  9. import sys
  10. class Foo(object):
  11. def __iter__(self):
  12. return self
  13. def next(self):
  14. del Foo.next
  15. return (1, 2)
  16. def case1():
  17. list(enumerate(Foo()))
  18. def case2():
  19. x, y = Foo()
  20. def case3():
  21. filter(None, Foo())
  22. def case4():
  23. map(None, Foo(), Foo())
  24. def case5():
  25. max(Foo())
  26. def case6():
  27. sum(Foo(), ())
  28. def case7():
  29. dict(Foo())
  30. def case8():
  31. sys.stdout.writelines(Foo())
  32. # etc...
  33. if __name__ == '__main__':
  34. if len(sys.argv) < 2:
  35. print __doc__.replace('<N>', str(N))
  36. else:
  37. n = int(sys.argv[1])
  38. func = globals()['case%d' % n]
  39. func()