diff options
| author | Damien George <damien.p.george@gmail.com> | 2015-07-24 15:05:56 +0000 |
|---|---|---|
| committer | Damien George <damien.p.george@gmail.com> | 2015-07-24 15:05:56 +0000 |
| commit | 96f0dd3cbc404b7f96bd7a35247faea8da266638 (patch) | |
| tree | 40a8158c2ac570d5a895a680063742a41bd7d1cd /py | |
| parent | fa7c61dfab0822619451673d726a5b444d3a9d28 (diff) | |
py/parse: Fix handling of empty input so it raises an exception.
Diffstat (limited to 'py')
| -rw-r--r-- | py/grammar.h | 2 | ||||
| -rw-r--r-- | py/parse.c | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/py/grammar.h b/py/grammar.h index be12b7eb5..3f6668808 100644 --- a/py/grammar.h +++ b/py/grammar.h @@ -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)) diff --git a/py/parse.c b/py/parse.c index ad13a9030..b20fdaacd 100644 --- a/py/parse.c +++ b/py/parse.c @@ -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); |
