[Python-checkins] cpython (3.5): fix possible refleak in MAKE_FUNCTION (closes #26991)

benjamin.peterson python-checkins at python.org
Tue May 17 01:54:32 EDT 2016


https://hg.python.org/cpython/rev/eaa3a71a6f62
changeset:   101396:eaa3a71a6f62
branch:      3.5
parent:      101394:ce1b14ed5445
user:        Benjamin Peterson <benjamin at python.org>
date:        Mon May 16 22:52:40 2016 -0700
summary:
  fix possible refleak in MAKE_FUNCTION (closes #26991)

Patch by Xiang Zhang.

files:
  Misc/NEWS      |  2 ++
  Python/ceval.c |  4 +++-
  2 files changed, 5 insertions(+), 1 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@
 Core and Builtins
 -----------------
 
+- Issue #26991: Fix possible refleak when creating a function with annotations.
+
 - Issue #27039: Fixed bytearray.remove() for values greater than 127.  Patch by
   Joe Jevnik.
 
diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3284,6 +3284,7 @@
                 PyObject *anns = PyDict_New();
                 if (anns == NULL) {
                     Py_DECREF(func);
+                    Py_DECREF(names);
                     goto error;
                 }
                 name_ix = PyTuple_Size(names);
@@ -3299,9 +3300,11 @@
                     if (err != 0) {
                         Py_DECREF(anns);
                         Py_DECREF(func);
+                        Py_DECREF(names);
                         goto error;
                     }
                 }
+                Py_DECREF(names);
 
                 if (PyFunction_SetAnnotations(func, anns) != 0) {
                     /* Can't happen unless
@@ -3311,7 +3314,6 @@
                     goto error;
                 }
                 Py_DECREF(anns);
-                Py_DECREF(names);
             }
 
             /* XXX Maybe this should be a separate opcode? */

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list