]> granicus.if.org Git - python/commitdiff
bpo-34190: Fix reference leak in call_function() (GH-8413)
authorjdemeyer <jdemeyer@cage.ugent.be>
Mon, 23 Jul 2018 16:41:20 +0000 (18:41 +0200)
committerVictor Stinner <vstinner@redhat.com>
Mon, 23 Jul 2018 16:41:20 +0000 (18:41 +0200)
Python/ceval.c

index 465e03012a3fd029ef958bab22a1d4308d9454f9..8f0e0e00c2b9d50ad55dda1c24ecd22977bc616d 100644 (file)
@@ -4576,12 +4576,15 @@ call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames)
                profiling. */
             PyObject *self = stack[0];
             func = Py_TYPE(func)->tp_descr_get(func, self, (PyObject*)Py_TYPE(self));
-            if (func == NULL) {
-                return NULL;
+            if (func != NULL) {
+                C_TRACE(x, _PyCFunction_FastCallKeywords(func,
+                                                         stack+1, nargs-1,
+                                                         kwnames));
+                Py_DECREF(func);
+            }
+            else {
+                x = NULL;
             }
-            C_TRACE(x, _PyCFunction_FastCallKeywords(func, stack+1, nargs-1,
-                                                     kwnames));
-            Py_DECREF(func);
         }
         else {
             x = _PyMethodDescr_FastCallKeywords(func, stack, nargs, kwnames);