From a50b6a324c73e46aab144d99d30cd955a9ebc636 Mon Sep 17 00:00:00 2001 From: mdroe Date: Tue, 15 Dec 2009 19:14:07 +0000 Subject: Backport of 8014: Don't segfault if fromfile reading is somehow faulty --- numpy/core/src/multiarray/ctors.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/numpy/core/src/multiarray/ctors.c b/numpy/core/src/multiarray/ctors.c index 7966874b5..f381d2879 100644 --- a/numpy/core/src/multiarray/ctors.c +++ b/numpy/core/src/multiarray/ctors.c @@ -968,7 +968,7 @@ setArrayFromSequence(PyArrayObject *a, PyObject *s, int dim, intp offset) } offset += a->strides[dim]; } - + Py_DECREF(s); return 0; @@ -2774,7 +2774,7 @@ PyArray_ArangeObj(PyObject *start, PyObject *stop, PyObject *step, PyArray_Descr /* calculate the length and next = start + step*/ length = _calc_length(start, stop, step, &next, PyTypeNum_ISCOMPLEX(dtype->type_num)); - err = PyErr_Occurred(); + err = PyErr_Occurred(); if (err) { Py_DECREF(dtype); if (err && PyErr_GivenExceptionMatches(err, PyExc_OverflowError)) { @@ -3030,6 +3030,10 @@ PyArray_FromFile(FILE *fp, PyArray_Descr *dtype, intp num, char *sep) (next_element) fromfile_next_element, (skip_separator) fromfile_skip_separator, NULL); } + if (ret == NULL) { + Py_DECREF(dtype); + return NULL; + } if (((intp) nread) < num) { /* Realloc memory for smaller number of elements */ const size_t nsize = NPY_MAX(nread,1)*ret->descr->elsize; -- cgit v1.2.1