diff options
author | mdroe <mdroe@localhost> | 2009-12-15 19:14:07 +0000 |
---|---|---|
committer | mdroe <mdroe@localhost> | 2009-12-15 19:14:07 +0000 |
commit | a50b6a324c73e46aab144d99d30cd955a9ebc636 (patch) | |
tree | 62fbd88f30d6741b4899408a5fbf6e9cdc623829 | |
parent | 9a0619787db3c7958799e74fb529a73d92c08f6a (diff) | |
download | numpy-a50b6a324c73e46aab144d99d30cd955a9ebc636.tar.gz |
Backport of 8014: Don't segfault if fromfile reading is somehow faulty
-rw-r--r-- | numpy/core/src/multiarray/ctors.c | 8 |
1 files 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; |