]> granicus.if.org Git - python/commitdiff
PyType_IsSubtype(): test tp_flags for HAVE_CLASS bit before accessing
authorGuido van Rossum <guido@python.org>
Fri, 7 Sep 2001 18:52:13 +0000 (18:52 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 7 Sep 2001 18:52:13 +0000 (18:52 +0000)
a->tp_mro.  If a doesn't have class, it's considered a subclass only
of itself or of 'object'.

This one fix is enough to prevent the ExtensionClass test suite from
dumping core, but that doesn't say much (it's a rather small test
suite).  Also note that for ExtensionClass-defined types, a different
subclass test may be needed.  But I haven't checked whether
PyType_IsSubtype() is actually used in situations where this matters
-- probably it doesn't, since we also don't check for classic classes.

Objects/typeobject.c

index 35dc76fe4ac4322c97e121aa490db1f2449d9087..f15b096580bf8faf66014530f0b48c08784a6c4a 100644 (file)
@@ -273,6 +273,9 @@ PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
 {
        PyObject *mro;
 
+       if (!(a->tp_flags & Py_TPFLAGS_HAVE_CLASS))
+               return b == a || b == &PyBaseObject_Type;
+
        mro = a->tp_mro;
        if (mro != NULL) {
                /* Deal with multiple inheritance without recursion