Commit 090a3495 authored by Jeremy Hylton's avatar Jeremy Hylton

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.
parent 6ab8b403
...@@ -4196,7 +4196,19 @@ slot_nb_nonzero(PyObject *self) ...@@ -4196,7 +4196,19 @@ slot_nb_nonzero(PyObject *self)
PyObject *temp = PyObject_Call(func, args, NULL); PyObject *temp = PyObject_Call(func, args, NULL);
Py_DECREF(args); Py_DECREF(args);
if (temp != NULL) { 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); Py_DECREF(temp);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment