summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2002-07-16 19:39:38 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2002-07-16 19:39:38 (GMT)
commit719841e2fbf9ca6320aa9515fe054cf4887dab64 (patch)
tree2cb4c6b40068887d5f79a1fe378fac091cc7a083
parent012b69cb30761f500103ec66cb8f8229ca017a94 (diff)
downloadcpython-719841e2fbf9ca6320aa9515fe054cf4887dab64.zip
cpython-719841e2fbf9ca6320aa9515fe054cf4887dab64.tar.gz
cpython-719841e2fbf9ca6320aa9515fe054cf4887dab64.tar.bz2
The object returned by tp_new() may not have a tp_init.
If the object is an ExtensionClass, for example, the slot is not even defined. So we must check that the type has the slot (implied by HAVE_CLASS) before calling tp_init().
-rw-r--r--Objects/typeobject.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index a7263d8..31a7c3d 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -199,7 +199,8 @@ type_call(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (!PyType_IsSubtype(obj->ob_type, type))
return obj;
type = obj->ob_type;
- if (type->tp_init != NULL &&
+ if (PyType_HasFeature(type, Py_TPFLAGS_HAVE_CLASS) &&
+ type->tp_init != NULL &&
type->tp_init(obj, args, kwds) < 0) {
Py_DECREF(obj);
obj = NULL;