diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2018-09-16 17:59:31 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-16 17:59:31 -0500 |
commit | f49c0169f5a62d4bfa62c791e2a4e2b78ddf7517 (patch) | |
tree | baa3bb6bdb1be3c0abbec92bb3d55cabdf38f25f | |
parent | 88c01b8ab4260b938f23f88f8a5f385fd361bc33 (diff) | |
parent | 35c9c25ae7646eae5698255ca7bdeabc584a117f (diff) | |
download | numpy-f49c0169f5a62d4bfa62c791e2a4e2b78ddf7517.tar.gz |
Merge pull request #11967 from mattip/PyArray_AdaptFlexibleDType-leak
BUG: fix refcount leak in PyArray_AdaptFlexibleDType
-rw-r--r-- | numpy/core/src/multiarray/convert_datatype.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/numpy/core/src/multiarray/convert_datatype.c b/numpy/core/src/multiarray/convert_datatype.c index 0d79f294c..3df764a48 100644 --- a/numpy/core/src/multiarray/convert_datatype.c +++ b/numpy/core/src/multiarray/convert_datatype.c @@ -149,11 +149,6 @@ PyArray_AdaptFlexibleDType(PyObject *data_obj, PyArray_Descr *data_dtype, { PyArray_DatetimeMetaData *meta; int flex_type_num; - PyArrayObject *arr = NULL; - PyArray_Descr *dtype = NULL; - int ndim = 0; - npy_intp dims[NPY_MAXDIMS]; - int result; if (*flex_dtype == NULL) { if (!PyErr_Occurred()) { @@ -168,7 +163,7 @@ PyArray_AdaptFlexibleDType(PyObject *data_obj, PyArray_Descr *data_dtype, /* Flexible types with expandable size */ if (PyDataType_ISUNSIZED(*flex_dtype)) { - /* First replace the flex dtype */ + /* First replace the flex_dtype */ PyArray_DESCR_REPLACE(*flex_dtype); if (*flex_dtype == NULL) { return; @@ -259,6 +254,11 @@ PyArray_AdaptFlexibleDType(PyObject *data_obj, PyArray_Descr *data_dtype, * GetArrayParamsFromObject won't iterate over * array. */ + PyArray_Descr *dtype = NULL; + PyArrayObject *arr = NULL; + int result; + int ndim = 0; + npy_intp dims[NPY_MAXDIMS]; list = PyArray_ToList((PyArrayObject *)data_obj); result = PyArray_GetArrayParamsFromObject( list, @@ -273,6 +273,8 @@ PyArray_AdaptFlexibleDType(PyObject *data_obj, PyArray_Descr *data_dtype, size = dtype->elsize; } } + Py_XDECREF(dtype); + Py_XDECREF(arr); Py_DECREF(list); } else if (PyArray_IsPythonScalar(data_obj)) { |