summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/core/src/common/ufunc_override.c12
-rw-r--r--numpy/core/src/multiarray/methods.c9
2 files changed, 18 insertions, 3 deletions
diff --git a/numpy/core/src/common/ufunc_override.c b/numpy/core/src/common/ufunc_override.c
index b67422132..3bc34c3f5 100644
--- a/numpy/core/src/common/ufunc_override.c
+++ b/numpy/core/src/common/ufunc_override.c
@@ -93,8 +93,16 @@ PyUFuncOverride_GetOutObjects(PyObject *kwds, PyObject **out_kwd_obj, PyObject *
return 0;
}
if (PyTuple_CheckExact(*out_kwd_obj)) {
- *out_objs = PySequence_Fast_ITEMS(*out_kwd_obj);
- return PySequence_Fast_GET_SIZE(*out_kwd_obj);
+ PyObject *seq = PySequence_Fast(*out_kwd_obj, "cannot convert");
+ int ret;
+ if (seq == NULL) {
+ return -1;
+ }
+ Py_DECREF(*out_kwd_obj);
+ *out_objs = PySequence_Fast_ITEMS(seq);
+ ret = PySequence_Fast_GET_SIZE(seq);
+ *out_kwd_obj = seq;
+ return ret;
}
else {
*out_objs = out_kwd_obj;
diff --git a/numpy/core/src/multiarray/methods.c b/numpy/core/src/multiarray/methods.c
index 231bd86dc..be66cc24f 100644
--- a/numpy/core/src/multiarray/methods.c
+++ b/numpy/core/src/multiarray/methods.c
@@ -1003,6 +1003,7 @@ any_array_ufunc_overrides(PyObject *args, PyObject *kwds)
int i;
int nin, nout;
PyObject *out_kwd_obj;
+ PyObject *fast;
PyObject **in_objs, **out_objs;
/* check inputs */
@@ -1010,12 +1011,18 @@ any_array_ufunc_overrides(PyObject *args, PyObject *kwds)
if (nin < 0) {
return -1;
}
- in_objs = PySequence_Fast_ITEMS(args);
+ fast = PySequence_Fast(args, "could not convert args for fast access");
+ if (fast == NULL) {
+ return -1;
+ }
+ in_objs = PySequence_Fast_ITEMS(fast);
for (i = 0; i < nin; ++i) {
if (PyUFunc_HasOverride(in_objs[i])) {
+ Py_DECREF(fast);
return 1;
}
}
+ Py_DECREF(fast);
/* check outputs, if any */
nout = PyUFuncOverride_GetOutObjects(kwds, &out_kwd_obj, &out_objs);
if (nout < 0) {