[Python-3000] [Python-3000-checkins] r54588
Amaury Forgeot d'Arc
amauryfa at gmail.com
Thu Mar 29 21:31:16 CEST 2007
Hello,
Sorry if I am wrong, but it seems to me that the change in r54588 has a problem:
http://mail.python.org/pipermail/python-3000-checkins/2007-March/000433.html
- in the normal case, the return value is INCREF'ed twice
- in the error case, Py_INCREF(NULL) is called...
One easy way to correct this is to move the last INCREF:
(sorry for the approximative patch format)
python/branches/p3yk/Objects/typeobject.c:
=================================================
static PyObject *
object_richcompare(PyObject *self, PyObject *other, int op)
{
PyObject *res;
switch (op) {
case Py_EQ:
res = (self == other) ? Py_True : Py_False;
+ Py_INCREF(res);
break;
case Py_NE:
/* By default, != returns the opposite of ==,
unless the latter returns NotImplemented. */
res = PyObject_RichCompare(self, other, Py_EQ);
if (res != NULL && res != Py_NotImplemented) {
int ok = PyObject_IsTrue(res);
Py_DECREF(res);
if (ok < 0)
res = NULL;
else {
if (ok)
res = Py_False;
else
res = Py_True;
Py_INCREF(res);
}
}
break;
default:
res = Py_NotImplemented;
+ Py_INCREF(res);
break;
}
- Py_INCREF(res);
return res;
}
Just trying to be faster than Coverity...
--
Amaury Forgeot d'Arc
More information about the Python-3000
mailing list