diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-02-08 12:57:09 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-02-08 12:57:09 +0100 |
commit | dedb0fac27238797f6923be5923c2021bcb02376 (patch) | |
tree | 00dd30031ef8d7ac61ecb65e0346002b491a19dd | |
parent | ccbd90beca0b79c3f9efa5d9486a912bb43b0b9c (diff) | |
download | cpython-dedb0fac27238797f6923be5923c2021bcb02376.tar.gz |
Fix refleaks if Py_EnterRecursiveCall() fails
Issue #29306: Destroy argstuple and kwdict if Py_EnterRecursiveCall() fails.
-rw-r--r-- | Objects/abstract.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index 8d18313ed0..4d7f94ad87 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2350,14 +2350,15 @@ _PyObject_FastCallDict(PyObject *callable, PyObject **args, Py_ssize_t nargs, } if (Py_EnterRecursiveCall(" while calling a Python object")) { + Py_DECREF(argstuple); return NULL; } result = (*call)(callable, argstuple, kwargs); Py_LeaveRecursiveCall(); - Py_DECREF(argstuple); + result = _Py_CheckFunctionResult(callable, result, NULL); return result; } @@ -2544,6 +2545,8 @@ _PyObject_FastCallKeywords(PyObject *callable, PyObject **stack, Py_ssize_t narg } if (Py_EnterRecursiveCall(" while calling a Python object")) { + Py_DECREF(argstuple); + Py_XDECREF(kwdict); return NULL; } |