From 463330249fb8e421acf658f9721fb6f8bf08e620 Mon Sep 17 00:00:00 2001 From: Ivan Levkivskyi Date: Fri, 17 Feb 2017 00:38:33 +0100 Subject: [PATCH] Fix segfault on f-string --- ast3/Custom/typed_ast.c | 2 +- ast3/Python/ast.c | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ast3/Custom/typed_ast.c b/ast3/Custom/typed_ast.c index e1484a83..06dc1d48 100644 --- a/ast3/Custom/typed_ast.c +++ b/ast3/Custom/typed_ast.c @@ -213,7 +213,7 @@ err_free(perrdetail *err) // copy of PyParser_ASTFromStringObject in Python/pythonrun.c /* Preferred access to parser is through AST. */ -static mod_ty +mod_ty string_object_to_c_ast(const char *s, PyObject *filename, int start, PyCompilerFlags *flags, int feature_version, PyArena *arena) diff --git a/ast3/Python/ast.c b/ast3/Python/ast.c index cdd61489..0471d6d1 100644 --- a/ast3/Python/ast.c +++ b/ast3/Python/ast.c @@ -25,6 +25,11 @@ static int validate_nonempty_seq(asdl_seq *, const char *, const char *); static int validate_stmt(stmt_ty); static int validate_expr(expr_ty, expr_context_ty); +mod_ty +string_object_to_c_ast(const char *s, PyObject *filename, int start, + PyCompilerFlags *flags, int feature_version, + PyArena *arena); + static int validate_comprehension(asdl_seq *gens) { @@ -4362,7 +4367,7 @@ fstring_compile_expr(const char *expr_start, const char *expr_end, PyCompilerFlags cf; mod_ty mod; char *str; - PyObject *o; + PyObject *o, *fstring_name; Py_ssize_t len; Py_ssize_t i; @@ -4411,8 +4416,11 @@ fstring_compile_expr(const char *expr_start, const char *expr_end, str[len+2] = 0; cf.cf_flags = PyCF_ONLY_AST; - mod = PyParser_ASTFromString(str, "", - Py_eval_input, &cf, c->c_arena); + fstring_name = PyUnicode_FromString(""); + mod = string_object_to_c_ast(str, fstring_name, + Py_eval_input, &cf, + c->c_feature_version, c->c_arena); + Py_DECREF(fstring_name); PyMem_RawFree(str); if (!mod) return NULL;