diff options
author | Guido van Rossum <guido@python.org> | 2006-03-10 02:04:28 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2006-03-10 02:04:28 (GMT) |
commit | 692cdbc5d648da5239b5caececc954960aa024e9 (patch) | |
tree | fb59771f69f5140ab70630c95c7e897d5857bffa /Objects | |
parent | 480f1bb67ba8d2857d87921391df278c5569774c (diff) | |
download | cpython-692cdbc5d648da5239b5caececc954960aa024e9.zip cpython-692cdbc5d648da5239b5caececc954960aa024e9.tar.gz cpython-692cdbc5d648da5239b5caececc954960aa024e9.tar.bz2 |
Fix three nits found by Coverity, adding null checks and comments.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/typeobject.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 681fb21..65bf404 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3186,6 +3186,10 @@ PyType_Ready(PyTypeObject *type) Py_INCREF(base); } + /* Now the only way base can still be NULL is if type is + * &PyBaseObject_Type. + */ + /* Initialize the base class */ if (base && base->tp_dict == NULL) { if (PyType_Ready(base) < 0) @@ -3195,7 +3199,11 @@ PyType_Ready(PyTypeObject *type) /* Initialize ob_type if NULL. This means extensions that want to be compilable separately on Windows can call PyType_Ready() instead of initializing the ob_type field of their type objects. */ - if (type->ob_type == NULL) + /* The test for base != NULL is really unnecessary, since base is only + NULL when type is &PyBaseObject_Type, and we know its ob_type is + not NULL (it's initialized to &PyType_Type). But coverity doesn't + know that. */ + if (type->ob_type == NULL && base != NULL) type->ob_type = base->ob_type; /* Initialize tp_bases */ @@ -3750,7 +3758,9 @@ hackcheck(PyObject *self, setattrofunc func, char *what) PyTypeObject *type = self->ob_type; while (type && type->tp_flags & Py_TPFLAGS_HEAPTYPE) type = type->tp_base; - if (type->tp_setattro != func) { + /* If type is NULL now, this is a really weird type. + In the same of backwards compatibility (?), just shut up. */ + if (type && type->tp_setattro != func) { PyErr_Format(PyExc_TypeError, "can't apply this %s to %s object", what, @@ -3965,7 +3975,9 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds) staticbase = subtype; while (staticbase && (staticbase->tp_flags & Py_TPFLAGS_HEAPTYPE)) staticbase = staticbase->tp_base; - if (staticbase->tp_new != type->tp_new) { + /* If staticbase is NULL now, it is a really weird type. + In the same of backwards compatibility (?), just shut up. */ + if (staticbase && staticbase->tp_new != type->tp_new) { PyErr_Format(PyExc_TypeError, "%s.__new__(%s) is not safe, use %s.__new__()", type->tp_name, |