]> granicus.if.org Git - python/commitdiff
Fix refleak: PyObject_GetItem returns a new reference, not a borrowed one like PyDict...
authorAntoine Pitrou <solipsis@pitrou.net>
Thu, 19 Apr 2012 16:21:04 +0000 (18:21 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Thu, 19 Apr 2012 16:21:04 +0000 (18:21 +0200)
Python/ceval.c

index a32d685f08cf447449d5d7353b186ec7403118c8..fde7841e2d50769af5f649016a5e4eaa300ba89d 100644 (file)
@@ -1940,6 +1940,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
                                     "__build_class__ not found");
                     break;
                 }
+                Py_INCREF(x);
             }
             else {
                 PyObject *build_class_str = _PyUnicode_FromId(&PyId___build_class__);
@@ -1953,7 +1954,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
                     break;
                 }
             }
-            Py_INCREF(x);
             PUSH(x);
             break;
         }
@@ -2092,6 +2092,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
             }
             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 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
                                         NAME_ERROR_MSG, w);
                             break;
                         }
+                        Py_INCREF(x);
                     }
                     else {
                         x = PyObject_GetItem(f->f_builtins, w);
@@ -2113,7 +2115,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
                         }
                     }
                 }
-                Py_INCREF(x);
             }
             PUSH(x);
             DISPATCH();
@@ -2186,7 +2187,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
                     break;
                 }
             }
-            Py_INCREF(x);
             PUSH(x);
             DISPATCH();