SF patch #413552 - Premature decref on object

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.
This commit is contained in:
Tim Peters 2001-04-07 20:34:48 +00:00
parent 4d4d0034c0
commit 388ed08cbf
1 changed files with 7 additions and 3 deletions

View 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)