diff options
author | Thouis (Ray) Jones <thouis@gmail.com> | 2012-06-08 17:53:30 +0200 |
---|---|---|
committer | Thouis (Ray) Jones <thouis@gmail.com> | 2012-06-08 17:53:30 +0200 |
commit | d0f520a30990c018114672f24197866452a2d088 (patch) | |
tree | 1236fa80a168f979d85aaa42d62a050a3c72ef33 /numpy | |
parent | db50690809bebb4e66375b6c0a34e9637e68dde9 (diff) | |
download | numpy-d0f520a30990c018114672f24197866452a2d088.tar.gz |
make sure self->metadata is valid before calling DECREF
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/multiarray/descriptor.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c index 43f8f57b8..218ad72ac 100644 --- a/numpy/core/src/multiarray/descriptor.c +++ b/numpy/core/src/multiarray/descriptor.c @@ -2531,7 +2531,7 @@ arraydescr_setstate(PyArray_Descr *self, PyObject *args) } if (PyDataType_ISDATETIME(self) && (metadata != NULL)) { - PyObject *new_metadata, *errmsg; + PyObject *old_metadata, *errmsg; PyArray_DatetimeMetaData temp_dt_data; if ((! PyTuple_Check(metadata)) || (PyTuple_Size(metadata) != 2)) { @@ -2547,18 +2547,19 @@ arraydescr_setstate(PyArray_Descr *self, PyObject *args) return NULL; } - new_metadata = PyTuple_GET_ITEM(metadata, 0); - Py_XINCREF(new_metadata); - Py_XDECREF(self->metadata); - self->metadata = new_metadata; + old_metadata = self->metadata; + self->metadata = PyTuple_GET_ITEM(metadata, 0); + Py_XINCREF(self->metadata); + Py_XDECREF(old_metadata); memcpy((char *) &((PyArray_DatetimeDTypeMetaData *)self->c_metadata)->meta, (char *) &temp_dt_data, sizeof(PyArray_DatetimeMetaData)); } else { - Py_XINCREF(metadata); - Py_XDECREF(self->metadata); + PyObject *old_metadata = self->metadata; self->metadata = metadata; + Py_XINCREF(self->metadata); + Py_XDECREF(old_metadata); } Py_INCREF(Py_None); |