diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2013-10-24 23:23:23 +0200 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2013-10-24 23:23:23 +0200 |
commit | ef511149ebeb5e53059b75b1305d0405744b3d8a (patch) | |
tree | 4fe0b7758379b4af7bbf6e9893304818289d2293 /numpy | |
parent | d6e81151a80eb1922dae027a04cabf8235d58834 (diff) | |
download | numpy-ef511149ebeb5e53059b75b1305d0405744b3d8a.tar.gz |
BUG: Further reference count issues in __int__ and friends
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/multiarray/number.c | 15 |
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; } /* |