From: Guido van Rossum Date: Fri, 7 Sep 2001 18:52:13 +0000 (+0000) Subject: PyType_IsSubtype(): test tp_flags for HAVE_CLASS bit before accessing X-Git-Tag: v2.2a3~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9478d07ee71161a8098da53b4b902899f36bf6ba;p=python PyType_IsSubtype(): test tp_flags for HAVE_CLASS bit before accessing 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. --- diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 35dc76fe4a..f15b096580 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -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