[Python-checkins] cpython: Fix refleak: PyObject_GetItem returns a new reference, not a borrowed one like

antoine.pitrou python-checkins at python.org
Thu Apr 19 18:23:57 CEST 2012


http://hg.python.org/cpython/rev/293180d199f2
changeset:   76419:293180d199f2
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Thu Apr 19 18:21:04 2012 +0200
summary:
  Fix refleak: PyObject_GetItem returns a new reference, not a borrowed one like PyDict_GetItem.

files:
  Python/ceval.c |  6 +++---
  1 files changed, 3 insertions(+), 3 deletions(-)


diff --git a/Python/ceval.c b/Python/ceval.c
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1940,6 +1940,7 @@
                                     "__build_class__ not found");
                     break;
                 }
+                Py_INCREF(x);
             }
             else {
                 PyObject *build_class_str = _PyUnicode_FromId(&PyId___build_class__);
@@ -1953,7 +1954,6 @@
                     break;
                 }
             }
-            Py_INCREF(x);
             PUSH(x);
             break;
         }
@@ -2092,6 +2092,7 @@
             }
             if (x == NULL) {
                 x = PyDict_GetItem(f->f_globals, w);
+                Py_XINCREF(x);
                 if (x == NULL) {
                     if (PyDict_CheckExact(f->f_builtins)) {
                         x = PyDict_GetItem(f->f_builtins, w);
@@ -2101,6 +2102,7 @@
                                         NAME_ERROR_MSG, w);
                             break;
                         }
+                        Py_INCREF(x);
                     }
                     else {
                         x = PyObject_GetItem(f->f_builtins, w);
@@ -2113,7 +2115,6 @@
                         }
                     }
                 }
-                Py_INCREF(x);
             }
             PUSH(x);
             DISPATCH();
@@ -2186,7 +2187,6 @@
                     break;
                 }
             }
-            Py_INCREF(x);
             PUSH(x);
             DISPATCH();
 

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


More information about the Python-checkins mailing list