slot_sq_contains(): This leaked a reference to the result of calling

__contains__().

Bugfix candidate.
This commit is contained in:
Tim Peters 2003-03-23 05:35:36 +00:00
parent 36eb4dfb81
commit bf9b24464e
1 changed files with 12 additions and 11 deletions

View File

@ -4016,10 +4016,11 @@ static int
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)
@ -4029,16 +4030,16 @@ slot_sq_contains(PyObject *self, PyObject *value)
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")