Commit 96f0dd3c authored by Damien George's avatar Damien George
Browse files

py/parse: Fix handling of empty input so it raises an exception.

parent fa7c61df
......@@ -38,7 +38,7 @@
// eval_input: testlist NEWLINE* ENDMARKER
DEF_RULE(single_input, nc, or(3), tok(NEWLINE), rule(simple_stmt), rule(compound_stmt))
DEF_RULE(file_input, nc, and(1), opt_rule(file_input_2))
DEF_RULE(file_input, c(generic_all_nodes), and(1), opt_rule(file_input_2))
DEF_RULE(file_input_2, c(generic_all_nodes), one_or_more, rule(file_input_3))
DEF_RULE(file_input_3, nc, or(2), tok(NEWLINE), rule(stmt))
DEF_RULE(eval_input, nc, and(2), rule(testlist), opt_rule(eval_input_2))
......
......@@ -720,6 +720,11 @@ memory_error:
goto syntax_error;
}
// check that parsing resulted in a parse node (can fail on empty input)
if (parser.result_stack_top == 0) {
goto syntax_error;
}
//result_stack_show(parser);
//printf("rule stack alloc: %d\n", parser.rule_stack_alloc);
//printf("result stack alloc: %d\n", parser.result_stack_alloc);
......
# parser tests
# completely empty string
# uPy and CPy differ for this case
#try:
# compile("", "stdin", "single")
#except SyntaxError:
# print("SyntaxError")
try:
compile("", "stdin", "eval")
except SyntaxError:
print("SyntaxError")
compile("", "stdin", "exec")
# empty continued line
try:
compile("\\\n", "stdin", "single")
except SyntaxError:
print("SyntaxError")
try:
compile("\\\n", "stdin", "eval")
except SyntaxError:
print("SyntaxError")
compile("\\\n", "stdin", "exec")
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment