From 9478d07ee71161a8098da53b4b902899f36bf6ba Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 7 Sep 2001 18:52:13 +0000 Subject: [PATCH] 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. --- Objects/typeobject.c | 3 +++ 1 file changed, 3 insertions(+) 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 -- 2.50.1