From: Victor Stinner Date: Wed, 8 Feb 2017 11:57:09 +0000 (+0100) Subject: Fix refleaks if Py_EnterRecursiveCall() fails X-Git-Tag: v3.7.0a1~1390 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=620580f280e3fe6583afee43580ef907b228add3;p=python Fix refleaks if Py_EnterRecursiveCall() fails Issue #29306: Destroy argstuple and kwdict if Py_EnterRecursiveCall() fails. --- 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; }