summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c2
-rw-r--r--numpy/core/src/multiarray/textreading/rows.c14
-rw-r--r--numpy/lib/tests/test_loadtxt.py5
3 files changed, 18 insertions, 3 deletions
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index a3cb3e131..96d0c893d 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -142,12 +142,12 @@ PyArray_GetPriority(PyObject *obj, double default_)
}
priority = PyFloat_AsDouble(ret);
+ Py_DECREF(ret);
if (error_converting(priority)) {
/* TODO[gh-14801]: propagate crashes for bad priority? */
PyErr_Clear();
return default_;
}
- Py_DECREF(ret);
return priority;
}
diff --git a/numpy/core/src/multiarray/textreading/rows.c b/numpy/core/src/multiarray/textreading/rows.c
index e30ff835e..86c01d189 100644
--- a/numpy/core/src/multiarray/textreading/rows.c
+++ b/numpy/core/src/multiarray/textreading/rows.c
@@ -432,7 +432,12 @@ read_rows(stream *s,
}
tokenizer_clear(&ts);
- PyMem_FREE(conv_funcs);
+ if (conv_funcs != NULL) {
+ for (Py_ssize_t i = 0; i < actual_num_fields; i++) {
+ Py_XDECREF(conv_funcs[i]);
+ }
+ PyMem_FREE(conv_funcs);
+ }
if (data_array == NULL) {
assert(row_count == 0 && result_shape[0] == 0);
@@ -474,7 +479,12 @@ read_rows(stream *s,
return data_array;
error:
- PyMem_FREE(conv_funcs);
+ if (conv_funcs != NULL) {
+ for (Py_ssize_t i = 0; i < actual_num_fields; i++) {
+ Py_XDECREF(conv_funcs[i]);
+ }
+ PyMem_FREE(conv_funcs);
+ }
tokenizer_clear(&ts);
Py_XDECREF(data_array);
return NULL;
diff --git a/numpy/lib/tests/test_loadtxt.py b/numpy/lib/tests/test_loadtxt.py
index 8839ef0a8..2f191f145 100644
--- a/numpy/lib/tests/test_loadtxt.py
+++ b/numpy/lib/tests/test_loadtxt.py
@@ -5,6 +5,7 @@ These tests complement those found in `test_io.py`.
"""
import sys
+import os
import pytest
from tempfile import NamedTemporaryFile, mkstemp
from io import StringIO
@@ -960,9 +961,11 @@ def test_parametric_unit_discovery(
# file-obj path
fd, fname = mkstemp()
+ os.close(fd)
with open(fname, "w") as fh:
fh.write("\n".join(data))
a = np.loadtxt(fname, dtype=unitless_dtype)
+ os.remove(fname)
assert a.dtype == expected.dtype
assert_equal(a, expected)
@@ -982,9 +985,11 @@ def test_str_dtype_unit_discovery_with_converter():
# file-obj path
fd, fname = mkstemp()
+ os.close(fd)
with open(fname, "w") as fh:
fh.write("\n".join(data))
a = np.loadtxt(fname, dtype="U", converters=conv, encoding=None)
+ os.remove(fname)
assert a.dtype == expected.dtype
assert_equal(a, expected)