diff options
author | Thomas Heller <theller@ctypes.org> | 2006-08-18 14:38:46 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2006-08-18 14:38:46 (GMT) |
commit | 0b21b43d491220ae51eebc4df9ba6cf616265c7c (patch) | |
tree | 48850986524b0033e6d85ef9fca1f4f48072454a /Modules/_ctypes | |
parent | c458433850348500ac8139ffca36a251ebc5b8ae (diff) | |
download | cpython-0b21b43d491220ae51eebc4df9ba6cf616265c7c.zip cpython-0b21b43d491220ae51eebc4df9ba6cf616265c7c.tar.gz cpython-0b21b43d491220ae51eebc4df9ba6cf616265c7c.tar.bz2 |
Add asserts to check for 'impossible' NULL values, with comments.
In one place where I'n not 1000% sure about the non-NULL, raise
a RuntimeError for safety.
This should fix the klocwork issues that Neal sent me. If so,
it should be applied to the release25-maint branch also.
Diffstat (limited to 'Modules/_ctypes')
-rw-r--r-- | Modules/_ctypes/_ctypes.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index ab83f8c..5204a7f 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -672,6 +672,7 @@ PointerType_from_param(PyObject *type, PyObject *value) return PyInt_FromLong(0); /* NULL pointer */ typedict = PyType_stgdict(type); + assert(typedict); /* Cannot be NULL for pointer types */ /* If we expect POINTER(<type>), but receive a <type> instance, accept it by calling byref(<type>). @@ -3129,6 +3130,13 @@ _build_callargs(CFuncPtrObject *self, PyObject *argtypes, } ob = PyTuple_GET_ITEM(argtypes, i); dict = PyType_stgdict(ob); + if (dict == NULL) { + /* Cannot happen: _validate_paramflags() + would not accept such an object */ + PyErr_Format(PyExc_RuntimeError, + "NULL stgdict unexpected"); + goto error; + } if (PyString_Check(dict->proto)) { PyErr_Format( PyExc_TypeError, @@ -3726,6 +3734,8 @@ Array_slice(PyObject *_self, Py_ssize_t ilow, Py_ssize_t ihigh) assert(stgdict); /* Cannot be NULL for array object instances */ proto = stgdict->proto; itemdict = PyType_stgdict(proto); + assert(itemdict); /* proto is the item type of the array, a ctypes + type, so this cannot be NULL */ if (itemdict->getfunc == getentry("c")->getfunc) { char *ptr = (char *)self->b_ptr; return PyString_FromStringAndSize(ptr + ilow, len); @@ -4159,6 +4169,9 @@ Pointer_item(PyObject *_self, Py_ssize_t index) proto = stgdict->proto; assert(proto); itemdict = PyType_stgdict(proto); + assert(itemdict); /* proto is the item type of the pointer, a ctypes + type, so this cannot be NULL */ + size = itemdict->size; offset = index * itemdict->size; @@ -4194,6 +4207,9 @@ Pointer_ass_item(PyObject *_self, Py_ssize_t index, PyObject *value) assert(proto); itemdict = PyType_stgdict(proto); + assert(itemdict); /* Cannot be NULL because the itemtype of a pointer + is always a ctypes type */ + size = itemdict->size; offset = index * itemdict->size; |