Plug a memory leak in list(), when appending to the result list.
diff --git a/Objects/abstract.c b/Objects/abstract.c
index a5f97a1..8ee1e5a 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -1291,11 +1291,15 @@
 			break;
 		}
 		if (i < n)
-			PyList_SET_ITEM(result, i, item);
-		else if (PyList_Append(result, item) < 0) {
-			Py_DECREF(result);
-			result = NULL;
-			break;
+			PyList_SET_ITEM(result, i, item); /* steals ref */
+		else {
+			int status = PyList_Append(result, item);
+			Py_DECREF(item);  /* append creates a new ref */
+			if (status < 0) {
+				Py_DECREF(result);
+				result = NULL;
+				break;
+			}
 		}
 	}