From d297f1ad78f1058c62bf47c2f1e2c2488f7e9d25 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 15 Jun 2008 19:53:12 +0000 Subject: [PATCH] #3117: backport r55087, fixes segfault with lambda (None,): None. --- Lib/test/test_grammar.py | 1 + Python/ast.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 6a9e5124c69..09ccde7002d 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -277,6 +277,7 @@ l5 = lambda x, y, z=2: x + y + z verify(l5(1, 2) == 5) verify(l5(1, 2, 3) == 6) check_syntax("lambda x: x = 2") +check_syntax("lambda (None,): None") ### stmt: simple_stmt | compound_stmt # Tested below diff --git a/Python/ast.c b/Python/ast.c index c7fd8bcc960..057b64df325 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -249,6 +249,8 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, goto error; asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset, arena)); + if (!asdl_seq_GET(stmts, 0)) + goto error; return Interactive(stmts, arena); } else { @@ -679,6 +681,8 @@ ast_for_arguments(struct compiling *c, const node *n) if (NCH(ch) != 1) { /* We have complex arguments, setup for unpacking. */ asdl_seq_SET(args, k++, compiler_complex_args(c, ch)); + if (!asdl_seq_GET(args, k-1)) + goto error; } else { /* def foo((x)): setup for checking NAME below. */ /* Loop because there can be many parens and tuple