diff Python/bltinmodule.c @ 17337:96ea0eccdb31 legacy-trunk

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.
author Tim Peters <tim.peters@gmail.com>
date Sat, 07 Apr 2001 20:34:48 +0000
parents 2054cea38754
children 2edaa8e9f381 32e7d0898eab
line wrap: on
line diff
--- a/Python/bltinmodule.c	Sat Apr 07 16:14:49 2001 +0000
+++ b/Python/bltinmodule.c	Sat Apr 07 20:34:48 2001 +0000
@@ -2291,18 +2291,22 @@
 		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)