summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2006-06-02 08:04:21 +0000
committerTravis Oliphant <oliphant@enthought.com>2006-06-02 08:04:21 +0000
commit4327faedf775668e4d2178f0ddd27ced9a082a7c (patch)
treeca5e15d3cd311d9e0561c68c0a88adde65282b1d
parentf68932abd4c908f8f312c5d4c515630b2976a669 (diff)
downloadnumpy-4327faedf775668e4d2178f0ddd27ced9a082a7c.tar.gz
Add some checks for RegisterDataType
-rw-r--r--numpy/core/src/arrayobject.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c
index e3ec10e53..15434daa8 100644
--- a/numpy/core/src/arrayobject.c
+++ b/numpy/core/src/arrayobject.c
@@ -1146,7 +1146,6 @@ static PyObject *
PyArray_Return(PyArrayObject *mp)
{
-
if (mp == NULL) return NULL;
if (PyErr_Occurred()) {
@@ -1185,6 +1184,7 @@ PyArray_RegisterDataType(PyArray_Descr *descr)
PyArray_Descr *descr2;
int typenum;
int i;
+ PyArray_ArrFuncs *f;
/* See if this type is already registered */
for (i=0; i<PyArray_NUMUSERTYPES; i++) {
@@ -1199,6 +1199,18 @@ PyArray_RegisterDataType(PyArray_Descr *descr)
"flexible data-type");
return -1;
}
+ f = descr->f;
+ if (f->nonzero == NULL || f->copyswap == NULL ||
+ f->copyswapn == NULL || f->setitem == NULL ||
+ f->getitem == NULL || f->cast == NULL) {
+ PyErr_SetString(PyExc_ValueError, "a required array function" \
+ " is missing.");
+ return -1;
+ }
+ if (descr->typeobj == NULL) {
+ PyErr_SetString(PyExc_ValueError, "missing typeobject");
+ return -1;
+ }
userdescrs = realloc(userdescrs,
(PyArray_NUMUSERTYPES+1)*sizeof(void *));
if (userdescrs == NULL) {