From 4433421ad3b1306b42e1023658a9bab7813f5838 Mon Sep 17 00:00:00 2001 From: mattip Date: Tue, 23 Aug 2016 14:48:45 +1000 Subject: [PATCH] BUG: cannot assign to tuple after use --- numpy/core/src/multiarray/multiarraymodule.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c index d90debc6fae6..39acf87faff7 100644 --- a/numpy/core/src/multiarray/multiarraymodule.c +++ b/numpy/core/src/multiarray/multiarraymodule.c @@ -3635,7 +3635,6 @@ _vec_string_with_args(PyArrayObject* char_array, PyArray_Descr* type, PyArrayMultiIterObject* in_iter = NULL; PyArrayObject* result = NULL; PyArrayIterObject* out_iter = NULL; - PyObject* args_tuple = NULL; Py_ssize_t i, n, nargs; nargs = PySequence_Size(args) + 1; @@ -3672,18 +3671,18 @@ _vec_string_with_args(PyArrayObject* char_array, PyArray_Descr* type, goto err; } - args_tuple = PyTuple_New(n); - if (args_tuple == NULL) { - goto err; - } - while (PyArray_MultiIter_NOTDONE(in_iter)) { PyObject* item_result; + PyObject* args_tuple = PyTuple_New(n); + if (args_tuple == NULL) { + goto err; + } for (i = 0; i < n; i++) { PyArrayIterObject* it = in_iter->iters[i]; PyObject* arg = PyArray_ToScalar(PyArray_ITER_DATA(it), it->ao); if (arg == NULL) { + Py_DECREF(args_tuple); goto err; } /* Steals ref to arg */ @@ -3691,6 +3690,7 @@ _vec_string_with_args(PyArrayObject* char_array, PyArray_Descr* type, } item_result = PyObject_CallObject(method, args_tuple); + Py_DECREF(args_tuple); if (item_result == NULL) { goto err; } @@ -3709,14 +3709,12 @@ _vec_string_with_args(PyArrayObject* char_array, PyArray_Descr* type, Py_DECREF(in_iter); Py_DECREF(out_iter); - Py_DECREF(args_tuple); return (PyObject*)result; err: Py_XDECREF(in_iter); Py_XDECREF(out_iter); - Py_XDECREF(args_tuple); Py_XDECREF(result); return 0;