]> granicus.if.org Git - python/commitdiff
Patch #486743: remove bad INCREF, propagate exception in append_objects.
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 2 Dec 2001 12:21:34 +0000 (12:21 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 2 Dec 2001 12:21:34 +0000 (12:21 +0000)
Modules/gcmodule.c

index f19782bc88310b243cd5607210ec83ecaa41024b..7f8d71a3e6bea997a215347a29574a4d8c4e26f4 100644 (file)
@@ -701,17 +701,19 @@ static char gc_get_objects__doc__[] =
 ;
 
 /* appending objects in a GC list to a Python list */
-static void
+static int
 append_objects(PyObject *py_list, PyGC_Head *gc_list)
 {
        PyGC_Head *gc;
        for (gc = gc_list->gc.gc_next; gc != gc_list; gc = gc->gc.gc_next) {
                PyObject *op = FROM_GC(gc);
                if (op != py_list) {
-                       Py_INCREF(op);
-                       PyList_Append(py_list, op);
+                       if (PyList_Append(py_list, op)) {
+                               return -1; /* exception */
+                       }
                }
        }
+       return 0;
 }
 
 static PyObject *
@@ -722,9 +724,12 @@ gc_get_objects(PyObject *self, PyObject *args)
        if (!PyArg_ParseTuple(args, ":get_objects")) /* check no args */
                return NULL;
        result = PyList_New(0);
-       append_objects(result, &_PyGC_generation0);
-       append_objects(result, &generation1);
-       append_objects(result, &generation2);
+       if (append_objects(result, &_PyGC_generation0) ||
+           append_objects(result, &generation1) ||
+           append_objects(result, &generation2)) {
+               Py_DECREF(result);
+               return NULL;
+       }
        return result;
 }