summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorMatti Picus <matti.picus@gmail.com>2021-11-09 09:55:37 +0200
committerGitHub <noreply@github.com>2021-11-09 09:55:37 +0200
commitc280e21a74f2a6fd16d9c318696fcf167689baa3 (patch)
tree3ea14d541d8b93e3b008c60bebe0869d29dd43bb /numpy
parent79b381f364818cd197d53ed8b767c8fa3bdcb33f (diff)
parent09326ebc9ee8720a00afbd34068a54414d741e94 (diff)
downloadnumpy-c280e21a74f2a6fd16d9c318696fcf167689baa3.tar.gz
Merge pull request #19429 from defoishugo/fix_multiarray_leaks
BUG: Fix some multiarray leaks
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/array_coercion.c1
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c11
-rw-r--r--numpy/core/src/multiarray/scalarapi.c5
3 files changed, 12 insertions, 5 deletions
diff --git a/numpy/core/src/multiarray/array_coercion.c b/numpy/core/src/multiarray/array_coercion.c
index 847bdafc3..3c44d312c 100644
--- a/numpy/core/src/multiarray/array_coercion.c
+++ b/numpy/core/src/multiarray/array_coercion.c
@@ -555,6 +555,7 @@ npy_new_coercion_cache(
cache = PyMem_Malloc(sizeof(coercion_cache_obj));
}
if (cache == NULL) {
+ Py_DECREF(arr_or_sequence);
PyErr_NoMemory();
return -1;
}
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index dea828ed9..fcf8d945f 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -4675,14 +4675,14 @@ PyMODINIT_FUNC PyInit__multiarray_umath(void) {
PyObject *m, *d, *s;
PyObject *c_api;
- /* Initialize CPU features */
- if (npy_cpu_init() < 0) {
- goto err;
- }
-
/* Create the module and add the functions */
m = PyModule_Create(&moduledef);
if (!m) {
+ return NULL;
+ }
+
+ /* Initialize CPU features */
+ if (npy_cpu_init() < 0) {
goto err;
}
@@ -4934,5 +4934,6 @@ PyMODINIT_FUNC PyInit__multiarray_umath(void) {
PyErr_SetString(PyExc_RuntimeError,
"cannot load multiarray module.");
}
+ Py_DECREF(m);
return NULL;
}
diff --git a/numpy/core/src/multiarray/scalarapi.c b/numpy/core/src/multiarray/scalarapi.c
index e409e9874..564352f1f 100644
--- a/numpy/core/src/multiarray/scalarapi.c
+++ b/numpy/core/src/multiarray/scalarapi.c
@@ -233,8 +233,12 @@ PyArray_CastScalarToCtype(PyObject *scalar, void *ctypeptr,
PyArray_VectorUnaryFunc* castfunc;
descr = PyArray_DescrFromScalar(scalar);
+ if (descr == NULL) {
+ return -1;
+ }
castfunc = PyArray_GetCastFunc(descr, outcode->type_num);
if (castfunc == NULL) {
+ Py_DECREF(descr);
return -1;
}
if (PyTypeNum_ISEXTENDED(descr->type_num) ||
@@ -254,6 +258,7 @@ PyArray_CastScalarToCtype(PyObject *scalar, void *ctypeptr,
NPY_ARRAY_CARRAY, NULL);
if (aout == NULL) {
Py_DECREF(ain);
+ Py_DECREF(descr);
return -1;
}
castfunc(PyArray_DATA(ain), PyArray_DATA(aout), 1, ain, aout);