diff options
author | Yury Selivanov <yselivanov@sprymix.com> | 2015-07-23 06:10:44 (GMT) |
---|---|---|
committer | Yury Selivanov <yselivanov@sprymix.com> | 2015-07-23 06:10:44 (GMT) |
commit | f315c1c01676bfabb5b1c6628642668f1ef436a6 (patch) | |
tree | 078327f0ab7ab7c2a7ac347d9cb4669e98a6d201 /Python | |
parent | 2f07a66dedb6f69cbe601f7ca2c3fca66898ffe3 (diff) | |
download | cpython-f315c1c01676bfabb5b1c6628642668f1ef436a6.zip cpython-f315c1c01676bfabb5b1c6628642668f1ef436a6.tar.gz cpython-f315c1c01676bfabb5b1c6628642668f1ef436a6.tar.bz2 |
Issue #24687: Plug refleak on SyntaxError in function parameters annotations.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/compile.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/Python/compile.c b/Python/compile.c index 33cc8c2..027e3ab 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1559,32 +1559,31 @@ compiler_visit_argannotation(struct compiler *c, identifier id, VISIT(c, expr, annotation); mangled = _Py_Mangle(c->u->u_private, id); if (!mangled) - return -1; + return 0; if (PyList_Append(names, mangled) < 0) { Py_DECREF(mangled); - return -1; + return 0; } Py_DECREF(mangled); } - return 0; + return 1; } static int compiler_visit_argannotations(struct compiler *c, asdl_seq* args, PyObject *names) { - int i, error; + int i; for (i = 0; i < asdl_seq_LEN(args); i++) { arg_ty arg = (arg_ty)asdl_seq_GET(args, i); - error = compiler_visit_argannotation( + if (!compiler_visit_argannotation( c, arg->arg, arg->annotation, - names); - if (error) - return error; + names)) + return 0; } - return 0; + return 1; } static int @@ -1604,16 +1603,16 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, if (!names) return -1; - if (compiler_visit_argannotations(c, args->args, names)) + if (!compiler_visit_argannotations(c, args->args, names)) goto error; if (args->vararg && args->vararg->annotation && - compiler_visit_argannotation(c, args->vararg->arg, + !compiler_visit_argannotation(c, args->vararg->arg, args->vararg->annotation, names)) goto error; - if (compiler_visit_argannotations(c, args->kwonlyargs, names)) + if (!compiler_visit_argannotations(c, args->kwonlyargs, names)) goto error; if (args->kwarg && args->kwarg->annotation && - compiler_visit_argannotation(c, args->kwarg->arg, + !compiler_visit_argannotation(c, args->kwarg->arg, args->kwarg->annotation, names)) goto error; @@ -1622,7 +1621,7 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, if (!return_str) goto error; } - if (compiler_visit_argannotation(c, return_str, returns, names)) { + if (!compiler_visit_argannotation(c, return_str, returns, names)) { goto error; } |