diff options
author | Guido van Rossum <guido@python.org> | 2001-09-07 18:52:13 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2001-09-07 18:52:13 (GMT) |
commit | 9478d07ee71161a8098da53b4b902899f36bf6ba (patch) | |
tree | 230b5be7376c5e85afaeab4350acc5d29b9d8a93 /Objects/typeobject.c | |
parent | 317e9f5ef11a5fef1c9d6cd1abf0f4ef32431cbc (diff) | |
download | cpython-9478d07ee71161a8098da53b4b902899f36bf6ba.zip cpython-9478d07ee71161a8098da53b4b902899f36bf6ba.tar.gz cpython-9478d07ee71161a8098da53b4b902899f36bf6ba.tar.bz2 |
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.
Diffstat (limited to 'Objects/typeobject.c')
-rw-r--r-- | Objects/typeobject.c | 3 |
1 files changed, 3 insertions, 0 deletions
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 @@ 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 |