From 388ed08cbf89ec362541bb165045739866fe9c98 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Sat, 7 Apr 2001 20:34:48 +0000 Subject: 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. --- Python/bltinmodule.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 9a09c8c..576447c 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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) -- cgit v0.12