]> granicus.if.org Git - python/commitdiff
Fix refleaks if Py_EnterRecursiveCall() fails
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 8 Feb 2017 11:57:09 +0000 (12:57 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 8 Feb 2017 11:57:09 +0000 (12:57 +0100)
Issue #29306: Destroy argstuple and kwdict if Py_EnterRecursiveCall() fails.

Objects/abstract.c

index 8d18313ed08f1ef9a63a5c1a0a68a6889ee8c141..4d7f94ad8707ef29a9b33ddb65b77b0ecdb353a8 100644 (file)
@@ -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;
         }