mirror of https://github.com/python/cpython
SF #1377897, Bus error in ast
If a line had multiple semi-colons and ended with a semi-colon, we would loop too many times and access a NULL node. Exit the loop early if there are no more children.
This commit is contained in:
parent
8ad64aaacc
commit
f8d403dd97
|
@ -276,6 +276,10 @@ check_syntax("lambda x: x = 2")
|
||||||
### simple_stmt: small_stmt (';' small_stmt)* [';']
|
### simple_stmt: small_stmt (';' small_stmt)* [';']
|
||||||
print 'simple_stmt'
|
print 'simple_stmt'
|
||||||
x = 1; pass; del x
|
x = 1; pass; del x
|
||||||
|
def foo():
|
||||||
|
# verify statments that end with semi-colons
|
||||||
|
x = 1; pass; del x;
|
||||||
|
foo()
|
||||||
|
|
||||||
### small_stmt: expr_stmt | print_stmt | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt
|
### small_stmt: expr_stmt | print_stmt | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt
|
||||||
# Tested below
|
# Tested below
|
||||||
|
|
|
@ -2562,6 +2562,11 @@ ast_for_suite(struct compiling *c, const node *n)
|
||||||
ch = CHILD(ch, 0);
|
ch = CHILD(ch, 0);
|
||||||
REQ(ch, simple_stmt);
|
REQ(ch, simple_stmt);
|
||||||
for (j = 0; j < NCH(ch); j += 2) {
|
for (j = 0; j < NCH(ch); j += 2) {
|
||||||
|
/* statement terminates with a semi-colon ';' */
|
||||||
|
if (NCH(CHILD(ch, j)) == 0) {
|
||||||
|
assert((j + 1) == NCH(ch));
|
||||||
|
break;
|
||||||
|
}
|
||||||
s = ast_for_stmt(c, CHILD(ch, j));
|
s = ast_for_stmt(c, CHILD(ch, j));
|
||||||
if (!s)
|
if (!s)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
Loading…
Reference in New Issue