]> granicus.if.org Git - python/commitdiff
symtable_cellvar_offsets(): This leaked references to little integers
authorTim Peters <tim.peters@gmail.com>
Mon, 24 Mar 2003 17:22:24 +0000 (17:22 +0000)
committerTim Peters <tim.peters@gmail.com>
Mon, 24 Mar 2003 17:22:24 +0000 (17:22 +0000)
in normal cases, and also in error cases.

Bugfix candidate.

Python/compile.c

index 717b3ffe1e5fd87904ec59e831b6a862be4b4a73..6616c588824131faf2501d52676c53f36070d0b3 100644 (file)
@@ -4496,7 +4496,8 @@ static int
 symtable_cellvar_offsets(PyObject **cellvars, int argcount, 
                         PyObject *varnames, int flags) 
 {
-       PyObject *v, *w, *d, *list = NULL;
+       PyObject *v = NULL;
+       PyObject *w, *d, *list = NULL;
        int i, pos;
 
        if (flags & CO_VARARGS)
@@ -4530,6 +4531,7 @@ symtable_cellvar_offsets(PyObject **cellvars, int argcount,
                        goto fail;
                if (PyDict_DelItem(*cellvars, PyList_GET_ITEM(list, i)) < 0)
                        goto fail;
+               Py_DECREF(v);
        }
        pos = 0;
        i = PyList_GET_SIZE(list);
@@ -4538,6 +4540,7 @@ symtable_cellvar_offsets(PyObject **cellvars, int argcount,
                w = PyInt_FromLong(i++);  /* don't care about the old key */
                if (PyDict_SetItem(d, v, w) < 0) {
                        Py_DECREF(w);
+                       v = NULL;
                        goto fail;
                }
                Py_DECREF(w);
@@ -4547,6 +4550,7 @@ symtable_cellvar_offsets(PyObject **cellvars, int argcount,
        return 1;
  fail:
        Py_DECREF(d);
+       Py_XDECREF(v);
        return -1;
 }