mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
SF bug 567538: Generator can crash the interpreter (Finn Bock).
This was a simple typo. Strange that the compiler didn't catch it! Instead of WHY_CONTINUE, two tests used CONTINUE_LOOP, which isn't a why_code at all, but an opcode; but even though 'why' is declared as an enum, comparing it to an int is apparently not even worth a warning -- not in gcc, and not in VC++. :-( Will fix in 2.2 too.
This commit is contained in:
parent
969de458aa
commit
c5fe5eb8d2
3 changed files with 25 additions and 2 deletions
|
@ -805,6 +805,26 @@ SyntaxError: invalid syntax
|
|||
... yield 2 # because it's a generator
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: 'return' with argument inside generator (<string>, line 8)
|
||||
|
||||
This one caused a crash (see SF bug 567538):
|
||||
|
||||
>>> def f():
|
||||
... for i in range(3):
|
||||
... try:
|
||||
... continue
|
||||
... finally:
|
||||
... yield i
|
||||
...
|
||||
>>> g = f()
|
||||
>>> print g.next()
|
||||
0
|
||||
>>> print g.next()
|
||||
1
|
||||
>>> print g.next()
|
||||
2
|
||||
>>> print g.next()
|
||||
Traceback (most recent call last):
|
||||
StopIteration
|
||||
"""
|
||||
|
||||
# conjoin is a simple backtracking generator, named in honor of Icon's
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue