summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorMark Wiebe <mwwiebe@gmail.com>2013-01-17 10:49:33 -0800
committerMark Wiebe <mwwiebe@gmail.com>2013-01-17 10:59:24 -0800
commit1539b711871ae8b949da90eabc18d7fc3a4d1170 (patch)
tree9cbda2c6e009dbf8774b9df719b304a39b956b38 /numpy
parent27690e33fa2202ecb1bca338ff38320de84b27ea (diff)
downloadnumpy-1539b711871ae8b949da90eabc18d7fc3a4d1170.tar.gz
BUG: Fix memory leak in ndarray construction from strings (gh-2927)
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/common.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/numpy/core/src/multiarray/common.c b/numpy/core/src/multiarray/common.c
index 64ca352a5..f27de491f 100644
--- a/numpy/core/src/multiarray/common.c
+++ b/numpy/core/src/multiarray/common.c
@@ -485,9 +485,11 @@ promote_types:
/* Set 'out_dtype' if it's NULL */
if (*out_dtype == NULL) {
if (!string_type && dtype->type_num == NPY_STRING) {
+ Py_DECREF(dtype);
return RETRY_WITH_STRING;
}
if (!string_type && dtype->type_num == NPY_UNICODE) {
+ Py_DECREF(dtype);
return RETRY_WITH_UNICODE;
}
*out_dtype = dtype;
@@ -500,17 +502,19 @@ promote_types:
if (res_dtype == NULL) {
return -1;
}
- Py_DECREF(*out_dtype);
if (!string_type &&
res_dtype->type_num == NPY_UNICODE &&
(*out_dtype)->type_num != NPY_UNICODE) {
+ Py_DECREF(res_dtype);
return RETRY_WITH_UNICODE;
}
if (!string_type &&
res_dtype->type_num == NPY_STRING &&
(*out_dtype)->type_num != NPY_STRING) {
+ Py_DECREF(res_dtype);
return RETRY_WITH_STRING;
}
+ Py_DECREF(*out_dtype);
*out_dtype = res_dtype;
return 0;
}