diff options
author | Travis Oliphant <oliphant@enthought.com> | 2006-06-02 08:04:21 +0000 |
---|---|---|
committer | Travis Oliphant <oliphant@enthought.com> | 2006-06-02 08:04:21 +0000 |
commit | 4327faedf775668e4d2178f0ddd27ced9a082a7c (patch) | |
tree | ca5e15d3cd311d9e0561c68c0a88adde65282b1d | |
parent | f68932abd4c908f8f312c5d4c515630b2976a669 (diff) | |
download | numpy-4327faedf775668e4d2178f0ddd27ced9a082a7c.tar.gz |
Add some checks for RegisterDataType
-rw-r--r-- | numpy/core/src/arrayobject.c | 14 |
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) { |