diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2014-08-18 13:24:36 -0600 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2014-08-18 13:24:36 -0600 |
commit | a3243adacf59a7a05326be3f0ac9c4728b501f70 (patch) | |
tree | 16ebe2e416202d1225cb49ca25b8548e6d635fd2 /numpy | |
parent | 8957f23bd61623e0293df610dfe339e09fb0c653 (diff) | |
parent | bbb7c3fbcdc2ddfcf79317661be2b99b1f6617e3 (diff) | |
download | numpy-a3243adacf59a7a05326be3f0ac9c4728b501f70.tar.gz |
Merge pull request #4975 from juliantaylor/datetime-memleak
BUG: fix memoryleaks in datetime dtype parsing
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/multiarray/datetime.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/numpy/core/src/multiarray/datetime.c b/numpy/core/src/multiarray/datetime.c index 272127f00..850c92b44 100644 --- a/numpy/core/src/multiarray/datetime.c +++ b/numpy/core/src/multiarray/datetime.c @@ -1920,21 +1920,25 @@ convert_pyobject_to_datetime_metadata(PyObject *obj, } if (PyBytes_AsStringAndSize(ascii, &str, &len) < 0) { + Py_DECREF(ascii); return -1; } if (len > 0 && str[0] == '[') { - return parse_datetime_metadata_from_metastr(str, len, out_meta); + int r = parse_datetime_metadata_from_metastr(str, len, out_meta); + Py_DECREF(ascii); + return r; } else { if (parse_datetime_extended_unit_from_string(str, len, NULL, out_meta) < 0) { + Py_DECREF(ascii); return -1; } + Py_DECREF(ascii); return 0; } - } /* @@ -2380,7 +2384,6 @@ convert_pyobject_to_datetime(PyArray_DatetimeMetaData *meta, PyObject *obj, Py_DECREF(bytes); return -1; } - Py_DECREF(bytes); /* Use the detected unit if none was specified */ if (meta->base == -1) { @@ -2389,9 +2392,11 @@ convert_pyobject_to_datetime(PyArray_DatetimeMetaData *meta, PyObject *obj, } if (convert_datetimestruct_to_datetime(meta, &dts, out) < 0) { + Py_DECREF(bytes); return -1; } + Py_DECREF(bytes); return 0; } /* Do no conversion on raw integers */ @@ -2580,6 +2585,7 @@ convert_pyobject_to_timedelta(PyArray_DatetimeMetaData *meta, PyObject *obj, succeeded = 1; } } + Py_DECREF(bytes); if (succeeded) { /* Use generic units if none was specified */ |