diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2014-02-22 12:39:42 -0700 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2014-02-22 12:39:42 -0700 |
commit | 826d13702dd28cff729595e37658611f4719067b (patch) | |
tree | 5af7a1d3eebb9356f1a9da222d779ae177ed371c | |
parent | d2fd1af156ac095156d3fbf833392b644e61c226 (diff) | |
parent | 6c4e64204df6f336b617ff0447d0ea104cdf1ae6 (diff) | |
download | numpy-826d13702dd28cff729595e37658611f4719067b.tar.gz |
Merge pull request #4350 from seberg/buffer-fixes
Buffer fixes
-rw-r--r-- | numpy/core/src/multiarray/buffer.c | 11 | ||||
-rw-r--r-- | numpy/core/src/multiarray/numpymemoryview.c | 15 |
2 files changed, 16 insertions, 10 deletions
diff --git a/numpy/core/src/multiarray/buffer.c b/numpy/core/src/multiarray/buffer.c index 4c1d476d5..b59729822 100644 --- a/numpy/core/src/multiarray/buffer.c +++ b/numpy/core/src/multiarray/buffer.c @@ -805,18 +805,19 @@ _descriptor_from_pep3118_format(char *s) if (*s == ':') { in_name = !in_name; *p = *s; + p++; } else if (in_name || !NumPyOS_ascii_isspace(*s)) { *p = *s; + p++; } - ++p; - ++s; + s++; } *p = '\0'; str = PyUString_FromStringAndSize(buf, strlen(buf)); - free(buf); if (str == NULL) { + free(buf); return NULL; } @@ -824,6 +825,7 @@ _descriptor_from_pep3118_format(char *s) _numpy_internal = PyImport_ImportModule("numpy.core._internal"); if (_numpy_internal == NULL) { Py_DECREF(str); + free(buf); return NULL; } descr = PyObject_CallMethod( @@ -833,14 +835,17 @@ _descriptor_from_pep3118_format(char *s) if (descr == NULL) { PyErr_Format(PyExc_ValueError, "'%s' is not a valid PEP 3118 buffer format string", buf); + free(buf); return NULL; } if (!PyArray_DescrCheck(descr)) { PyErr_Format(PyExc_RuntimeError, "internal error: numpy.core._internal._dtype_from_pep3118 " "did not return a valid dtype, got %s", buf); + free(buf); return NULL; } + free(buf); return (PyArray_Descr*)descr; } diff --git a/numpy/core/src/multiarray/numpymemoryview.c b/numpy/core/src/multiarray/numpymemoryview.c index 27c02e592..ccc5f33ed 100644 --- a/numpy/core/src/multiarray/numpymemoryview.c +++ b/numpy/core/src/multiarray/numpymemoryview.c @@ -252,7 +252,6 @@ NPY_NO_EXPORT PyObject * PyMemorySimpleView_FromObject(PyObject *base) { PyMemorySimpleViewObject *mview = NULL; - Py_buffer view; if (Py_TYPE(base)->tp_as_buffer == NULL || Py_TYPE(base)->tp_as_buffer->bf_getbuffer == NULL) { @@ -263,17 +262,19 @@ PyMemorySimpleView_FromObject(PyObject *base) return NULL; } - memset(&view, 0, sizeof(Py_buffer)); - if (PyObject_GetBuffer(base, &view, PyBUF_FULL_RO) < 0) - return NULL; - mview = (PyMemorySimpleViewObject *) PyObject_GC_New(PyMemorySimpleViewObject, &PyMemorySimpleView_Type); if (mview == NULL) { - PyBuffer_Release(&view); return NULL; } - memcpy(&mview->view, &view, sizeof(Py_buffer)); + + memset(&mview->view, 0, sizeof(Py_buffer)); + mview->base = NULL; + if (PyObject_GetBuffer(base, &mview->view, PyBUF_FULL_RO) < 0) { + Py_DECREF(mview); + return NULL; + } + mview->base = base; Py_INCREF(base); |