diff Python/bltinmodule.c @ 2120:84b61fe44573 legacy-trunk

fix subtle refcount big in filter() -- Tim MacKenzie
author Guido van Rossum <guido@python.org>
date Tue, 10 Jan 1995 17:40:55 +0000
parents 76c860a18d82
children e54b8654f938
line wrap: on
line diff
--- a/Python/bltinmodule.c	Tue Jan 10 17:08:10 1995 +0000
+++ b/Python/bltinmodule.c	Tue Jan 10 17:40:55 1995 +0000
@@ -186,21 +186,22 @@
 
 		if (func == None) {
 			good = item;
+			INCREF(good);
 		}
 		else {
 			object *arg = mkvalue("(O)", item);
-			DECREF(item);
 			if (arg == NULL)
 				goto Fail_1;
 			good = call_object(func, arg);
 			DECREF(arg);
-			if (good == NULL)
+			if (good == NULL) {
+				DECREF(item);
 				goto Fail_1;
+			}
 		}
 		ok = testbool(good);
 		DECREF(good);
 		if (ok) {
-			INCREF(item);
 			if (j < len) {
 				if (setlistitem(result, j++, item) < 0)
 					goto Fail_1;
@@ -210,6 +211,8 @@
 				if (addlistitem(result, item) < 0)
 					goto Fail_1;
 			}
+		} else {
+			DECREF(item);
 		}
 	}