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 35dc76f..f15b096 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -273,6 +273,9 @@
{
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