diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx index da6acbb..fc283f3 100644 --- a/msgpack/_unpacker.pyx +++ b/msgpack/_unpacker.pyx @@ -129,7 +129,8 @@ cdef inline int get_data_from_buffer(object obj, PyBuffer_Release(view) # create a contiguous copy and get buffer contiguous = PyMemoryView_GetContiguous(obj, PyBUF_READ, b'C') - PyObject_GetBuffer(contiguous, view, PyBUF_SIMPLE) + if PyObject_GetBuffer(contiguous, view, PyBUF_SIMPLE) == -1: + raise buffer_len[0] = view.len buf[0] = view.buf diff --git a/msgpack/fallback.py b/msgpack/fallback.py index 159dff2..e4cb987 100644 --- a/msgpack/fallback.py +++ b/msgpack/fallback.py @@ -328,8 +328,7 @@ class Unpacker: self._buf_checkpoint = 0 # Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython - # tobytes ensures compatibility with non-contiguous memoryviews - self._buffer.extend(view.tobytes()) + self._buffer.extend(view if view.contiguous else view.tobytes()) view.release() def _consume(self):