diff Objects/typeobject.c @ 19803:32cfce4d83dc legacy-trunk

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.
author Guido van Rossum <guido@python.org>
date Fri, 07 Sep 2001 18:52:13 +0000
parents ae056f114974
children 0584c9132525
line wrap: on
line diff
--- a/Objects/typeobject.c	Fri Sep 07 18:23:30 2001 +0000
+++ b/Objects/typeobject.c	Fri Sep 07 18:52:13 2001 +0000
@@ -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