summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorThouis (Ray) Jones <thouis@gmail.com>2012-06-08 17:53:30 +0200
committerThouis (Ray) Jones <thouis@gmail.com>2012-06-08 17:53:30 +0200
commitd0f520a30990c018114672f24197866452a2d088 (patch)
tree1236fa80a168f979d85aaa42d62a050a3c72ef33 /numpy
parentdb50690809bebb4e66375b6c0a34e9637e68dde9 (diff)
downloadnumpy-d0f520a30990c018114672f24197866452a2d088.tar.gz
make sure self->metadata is valid before calling DECREF
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/descriptor.c15
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);