Check return type of __nonzero__() method.

The language reference says you must return an int or a bool.  This
fix limits the scope of SF bug 759227 (infinite recursion) to
subclasses of int.
This commit is contained in:
Jeremy Hylton 2003-06-27 16:46:45 +00:00
parent 6ab8b40337
commit 090a3495b3
1 changed files with 13 additions and 1 deletions

View File

@ -4196,7 +4196,19 @@ slot_nb_nonzero(PyObject *self)
PyObject *temp = PyObject_Call(func, args, NULL);
Py_DECREF(args);
if (temp != NULL) {
result = PyObject_IsTrue(temp);
if (PyInt_Check(temp)) {
/* XXX need to guard against recursion here */
result = PyObject_IsTrue(temp);
}
else if (PyBool_Check(temp))
result = PyObject_IsTrue(temp);
else {
PyErr_Format(PyExc_TypeError,
"__nonzero__ should return "
"bool or int, returned %s",
temp->ob_type->tp_name);
result = NULL;
}
Py_DECREF(temp);
}
}