]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
SF patch #413552 - Premature decref on object
authorTim Peters <tim.peters@gmail.com>
Sat, 7 Apr 2001 20:34:48 +0000 (20:34 +0000)
committerTim Peters <tim.peters@gmail.com>
Sat, 7 Apr 2001 20:34:48 +0000 (20:34 +0000)
Jeffery Collins pointed out that filterstring decrefs a character object
before it's done using it.  This works by accident today because another
module always happens to have an active reference too at the time.  The
accident doesn't work after his Pippy modifications, and since it *is*
an accident even in the mainline Python, it should work by design there too.
The patch accomplishes that.

Python/bltinmodule.c

index 9a09c8c4367c1c37652d083b06e5f1986aafa4a0..576447cabc83427e6f7f70c1883cc7eb36428e25 100644 (file)
@@ -2291,18 +2291,22 @@ filterstring(PyObject *func, PyObject *strobj)
                if (item == NULL)
                        goto Fail_1;
                arg = Py_BuildValue("(O)", item);
-               Py_DECREF(item);
-               if (arg == NULL)
+               if (arg == NULL) {
+                       Py_DECREF(item);
                        goto Fail_1;
+               }
                good = PyEval_CallObject(func, arg);
                Py_DECREF(arg);
-               if (good == NULL)
+               if (good == NULL) {
+                       Py_DECREF(item);
                        goto Fail_1;
+               }
                ok = PyObject_IsTrue(good);
                Py_DECREF(good);
                if (ok)
                        PyString_AS_STRING((PyStringObject *)result)[j++] =
                                PyString_AS_STRING((PyStringObject *)item)[0];
+               Py_DECREF(item);
        }
 
        if (j < len && _PyString_Resize(&result, j) < 0)