diff --git a/numpy/core/src/multiarray/buffer.c b/numpy/core/src/multiarray/buffer.c index d14f87abb843..13d7038d3448 100644 --- a/numpy/core/src/multiarray/buffer.c +++ b/numpy/core/src/multiarray/buffer.c @@ -1057,7 +1057,7 @@ _descriptor_from_pep3118_format_fast(char const *s, PyObject **result) else { *result = (PyObject*)PyArray_DescrNewByteorder(descr, byte_order); Py_DECREF(descr); - if (result == NULL) { + if (*result == NULL) { return 0; } } diff --git a/numpy/core/src/multiarray/ctors.c b/numpy/core/src/multiarray/ctors.c index 2535569a68f6..4464d7ead51d 100644 --- a/numpy/core/src/multiarray/ctors.c +++ b/numpy/core/src/multiarray/ctors.c @@ -1881,6 +1881,9 @@ PyArray_CheckFromAny(PyObject *op, PyArray_Descr *descr, int min_depth, if (!descr && PyArray_Check(op) && PyArray_ISBYTESWAPPED((PyArrayObject* )op)) { descr = PyArray_DescrNew(PyArray_DESCR((PyArrayObject *)op)); + if (descr == NULL) { + return NULL; + } } else if (descr && !PyArray_ISNBO(descr->byteorder)) { PyArray_DESCR_REPLACE(descr); diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c index a5cb6a9fcad0..07abc755fab3 100644 --- a/numpy/core/src/multiarray/descriptor.c +++ b/numpy/core/src/multiarray/descriptor.c @@ -597,9 +597,7 @@ _convert_from_array_descr(PyObject *obj, int align) PyArray_Descr *new = PyArray_DescrNewFromType(NPY_VOID); if (new == NULL) { - Py_XDECREF(fields); - Py_XDECREF(nameslist); - return NULL; + goto fail; } new->fields = fields; new->names = nameslist; @@ -703,6 +701,9 @@ _convert_from_list(PyObject *obj, int align) totalsize += conv->elsize; } PyArray_Descr *new = PyArray_DescrNewFromType(NPY_VOID); + if (new == NULL) { + goto fail; + } new->fields = fields; new->names = nameslist; new->flags = dtypeflags; diff --git a/numpy/core/src/multiarray/methods.c b/numpy/core/src/multiarray/methods.c index 20a70a37e862..8fa9bf2ca357 100644 --- a/numpy/core/src/multiarray/methods.c +++ b/numpy/core/src/multiarray/methods.c @@ -1396,6 +1396,10 @@ array_partition(PyArrayObject *self, return NULL; } newd = PyArray_DescrNew(saved); + if (newd == NULL) { + Py_DECREF(new_name); + return NULL; + } Py_DECREF(newd->names); newd->names = new_name; ((PyArrayObject_fields *)self)->descr = newd; diff --git a/tools/swig/pyfragments.swg b/tools/swig/pyfragments.swg index 558633733da3..eac817322242 100644 --- a/tools/swig/pyfragments.swg +++ b/tools/swig/pyfragments.swg @@ -52,7 +52,7 @@ } %#endif if (!PyArray_IsScalar(obj,Integer)) return SWIG_TypeError; - PyArray_Descr * longDescr = PyArray_DescrNewFromType(NPY_LONG); + PyArray_Descr * longDescr = PyArray_DescrFromType(NPY_LONG); PyArray_CastScalarToCtype(obj, (void*)val, longDescr); Py_DECREF(longDescr); return SWIG_OK; @@ -102,7 +102,7 @@ } %#endif if (!PyArray_IsScalar(obj,Integer)) return SWIG_TypeError; - PyArray_Descr * ulongDescr = PyArray_DescrNewFromType(NPY_ULONG); + PyArray_Descr * ulongDescr = PyArray_DescrFromType(NPY_ULONG); PyArray_CastScalarToCtype(obj, (void*)val, ulongDescr); Py_DECREF(ulongDescr); return SWIG_OK;