diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2021-12-15 11:19:10 -0600 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2021-12-15 11:19:10 -0600 |
commit | cf19a9ca8f13efe8d8dff550043cf9c9e5f7f9d3 (patch) | |
tree | 6a1f9ec84f3c13ff310dcd234b33f68be17f4e0e /numpy | |
parent | d3881b360367d2e5b1e44efcb6653c82c36ca68c (diff) | |
download | numpy-cf19a9ca8f13efe8d8dff550043cf9c9e5f7f9d3.tar.gz |
BUG: Fix leaks found using pytest-leaks
This fixes a few more issues. I believe all remaining ones are
just false positives (pytest fixtures are not accounted for correctly),
in f2py (many probably fine, as it compiles new modules), or due to
pickling empty arrays (i.e. the problem in `setstate`).
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/_simd/_simd_convert.inc | 1 | ||||
-rw-r--r-- | numpy/core/src/multiarray/getset.c | 1 | ||||
-rw-r--r-- | numpy/core/src/multiarray/scalartypes.c.src | 1 | ||||
-rw-r--r-- | numpy/core/src/umath/dispatching.c | 4 |
4 files changed, 7 insertions, 0 deletions
diff --git a/numpy/core/src/_simd/_simd_convert.inc b/numpy/core/src/_simd/_simd_convert.inc index 73869ef1f..46e044479 100644 --- a/numpy/core/src/_simd/_simd_convert.inc +++ b/numpy/core/src/_simd/_simd_convert.inc @@ -94,6 +94,7 @@ simd_sequence_from_iterable(PyObject *obj, simd_data_type dtype, Py_ssize_t min_ "minimum acceptable size of the required sequence is %d, given(%d)", min_size, seq_size ); + Py_DECREF(seq_obj); return NULL; } npyv_lanetype_u8 *dst = simd_sequence_new(seq_size, dtype); diff --git a/numpy/core/src/multiarray/getset.c b/numpy/core/src/multiarray/getset.c index e81ca2947..2544ca9e7 100644 --- a/numpy/core/src/multiarray/getset.c +++ b/numpy/core/src/multiarray/getset.c @@ -401,6 +401,7 @@ array_data_set(PyArrayObject *self, PyObject *op, void *NPY_UNUSED(ignored)) return -1; } PyDataMem_UserFREE(PyArray_DATA(self), nbytes, handler); + Py_CLEAR(((PyArrayObject_fields *)self)->mem_handler); } if (PyArray_BASE(self)) { if ((PyArray_FLAGS(self) & NPY_ARRAY_WRITEBACKIFCOPY) || diff --git a/numpy/core/src/multiarray/scalartypes.c.src b/numpy/core/src/multiarray/scalartypes.c.src index db1e49db8..013526ff0 100644 --- a/numpy/core/src/multiarray/scalartypes.c.src +++ b/numpy/core/src/multiarray/scalartypes.c.src @@ -2585,6 +2585,7 @@ gentype_arrtype_getbuffer(PyObject *self, Py_buffer *view, int flags) "user-defined scalar %R registered for built-in dtype %S? " "This should be impossible.", self, descr); + Py_DECREF(descr); return -1; } view->ndim = 0; diff --git a/numpy/core/src/umath/dispatching.c b/numpy/core/src/umath/dispatching.c index cfeb0b17a..81d47a0e1 100644 --- a/numpy/core/src/umath/dispatching.c +++ b/numpy/core/src/umath/dispatching.c @@ -583,6 +583,10 @@ legacy_promote_using_legacy_type_resolver(PyUFuncObject *ufunc, NPY_UNSAFE_CASTING, (PyArrayObject **)ops, type_tuple, out_descrs) < 0) { Py_XDECREF(type_tuple); + /* Not all legacy resolvers clean up on failures: */ + for (int i = 0; i < nargs; i++) { + Py_CLEAR(out_descrs[i]); + } return -1; } Py_XDECREF(type_tuple); |