]> granicus.if.org Git - python/commitdiff
Check return type of __nonzero__() method.
authorJeremy Hylton <jeremy@alum.mit.edu>
Fri, 27 Jun 2003 16:46:45 +0000 (16:46 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Fri, 27 Jun 2003 16:46:45 +0000 (16:46 +0000)
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.

Objects/typeobject.c

index df9e6175a3f9e3b422d62a20bd13db6d0582d476..7c4e74461954becb8695e3f738f9d0daafa3995e 100644 (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);
                }
        }