diff Objects/typeobject.c @ 28395:1e0e67947175 2.2

Backport Tim's checkin 2.218: slot_sq_contains(): This leaked a reference to the result of calling __contains__().
author Neal Norwitz <nnorwitz@gmail.com>
date Sun, 23 Mar 2003 14:36:50 +0000
parents 83701fab32fe
children 91130a4cc1ce
line wrap: on
line diff
--- a/Objects/typeobject.c	Sun Mar 23 14:32:56 2003 +0000
+++ b/Objects/typeobject.c	Sun Mar 23 14:36:50 2003 +0000
@@ -3025,10 +3025,11 @@
 slot_sq_contains(PyObject *self, PyObject *value)
 {
 	PyObject *func, *res, *args;
+	int result = -1;
+
 	static PyObject *contains_str;
 
 	func = lookup_maybe(self, "__contains__", &contains_str);
-
 	if (func != NULL) {
 		args = Py_BuildValue("(O)", value);
 		if (args == NULL)
@@ -3038,16 +3039,16 @@
 			Py_DECREF(args);
 		}
 		Py_DECREF(func);
-		if (res == NULL)
-			return -1;
-		return PyObject_IsTrue(res);
+		if (res != NULL) {
+			result = PyObject_IsTrue(res);
+			Py_DECREF(res);
+		}
 	}
-	else if (PyErr_Occurred())
-		return -1;
-	else {
-		return _PySequence_IterSearch(self, value,
-					      PY_ITERSEARCH_CONTAINS);
+	else if (! PyErr_Occurred()) {
+		result = _PySequence_IterSearch(self, value,
+						 PY_ITERSEARCH_CONTAINS);
 	}
+	return result;
 }
 
 SLOT1(slot_sq_inplace_concat, "__iadd__", PyObject *, "O")