summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorSebastian Berg <sebastian@sipsolutions.net>2013-10-24 23:23:23 +0200
committerSebastian Berg <sebastian@sipsolutions.net>2013-10-24 23:23:23 +0200
commitef511149ebeb5e53059b75b1305d0405744b3d8a (patch)
tree4fe0b7758379b4af7bbf6e9893304818289d2293 /numpy
parentd6e81151a80eb1922dae027a04cabf8235d58834 (diff)
downloadnumpy-ef511149ebeb5e53059b75b1305d0405744b3d8a.tar.gz
BUG: Further reference count issues in __int__ and friends
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/number.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/number.c b/numpy/core/src/multiarray/number.c
index c8a7c9c7e..bb281835b 100644
--- a/numpy/core/src/multiarray/number.c
+++ b/numpy/core/src/multiarray/number.c
@@ -833,14 +833,19 @@ array_long(PyArrayObject *v)
return NULL;
}
pv = PyArray_DESCR(v)->f->getitem(PyArray_DATA(v), v);
+ if (pv == NULL) {
+ return NULL;
+ }
if (Py_TYPE(pv)->tp_as_number == 0) {
PyErr_SetString(PyExc_TypeError, "cannot convert to an int; "\
"scalar object is not a number");
+ Py_DECREF(pv);
return NULL;
}
if (Py_TYPE(pv)->tp_as_number->nb_long == 0) {
PyErr_SetString(PyExc_TypeError, "don't know how to convert "\
"scalar number to long");
+ Py_DECREF(pv);
return NULL;
}
/*
@@ -869,14 +874,19 @@ array_oct(PyArrayObject *v)
return NULL;
}
pv = PyArray_DESCR(v)->f->getitem(PyArray_DATA(v), v);
+ if (pv == NULL) {
+ return NULL;
+ }
if (Py_TYPE(pv)->tp_as_number == 0) {
PyErr_SetString(PyExc_TypeError, "cannot convert to an int; "\
"scalar object is not a number");
+ Py_DECREF(pv);
return NULL;
}
if (Py_TYPE(pv)->tp_as_number->nb_oct == 0) {
PyErr_SetString(PyExc_TypeError, "don't know how to convert "\
"scalar number to oct");
+ Py_DECREF(pv);
return NULL;
}
/*
@@ -905,14 +915,19 @@ array_hex(PyArrayObject *v)
return NULL;
}
pv = PyArray_DESCR(v)->f->getitem(PyArray_DATA(v), v);
+ if (pv == NULL) {
+ return NULL;
+ }
if (Py_TYPE(pv)->tp_as_number == 0) {
PyErr_SetString(PyExc_TypeError, "cannot convert to an int; "\
"scalar object is not a number");
+ Py_DECREF(pv);
return NULL;
}
if (Py_TYPE(pv)->tp_as_number->nb_hex == 0) {
PyErr_SetString(PyExc_TypeError, "don't know how to convert "\
"scalar number to hex");
+ Py_DECREF(pv);
return NULL;
}
/*