summaryrefslogtreecommitdiff
path: root/msgpack
diff options
context:
space:
mode:
authorInada Naoki <songofacandy@gmail.com>2019-12-05 20:20:53 +0900
committerGitHub <noreply@github.com>2019-12-05 20:20:53 +0900
commit9ae43709e42092c7f6a4e990d696d9005fa1623d (patch)
tree7371cd47aacdb5600ac2d41428efa70831dbc6bc /msgpack
parentaf4eea430e2f176f17fff5abe781dd83f55d4657 (diff)
downloadmsgpack-python-9ae43709e42092c7f6a4e990d696d9005fa1623d.tar.gz
Drop old buffer protocol support (#383)
Diffstat (limited to 'msgpack')
-rw-r--r--msgpack/_unpacker.pyx60
1 files changed, 22 insertions, 38 deletions
diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx
index 6dedd30..3c9b7b3 100644
--- a/msgpack/_unpacker.pyx
+++ b/msgpack/_unpacker.pyx
@@ -109,38 +109,26 @@ def default_read_extended_type(typecode, data):
cdef inline int get_data_from_buffer(object obj,
Py_buffer *view,
char **buf,
- Py_ssize_t *buffer_len,
- int *new_protocol) except 0:
+ Py_ssize_t *buffer_len) except 0:
cdef object contiguous
cdef Py_buffer tmp
- if PyObject_CheckBuffer(obj):
- new_protocol[0] = 1
- if PyObject_GetBuffer(obj, view, PyBUF_FULL_RO) == -1:
- raise
- if view.itemsize != 1:
- PyBuffer_Release(view)
- raise BufferError("cannot unpack from multi-byte object")
- if PyBuffer_IsContiguous(view, b'A') == 0:
- PyBuffer_Release(view)
- # create a contiguous copy and get buffer
- contiguous = PyMemoryView_GetContiguous(obj, PyBUF_READ, b'C')
- PyObject_GetBuffer(contiguous, view, PyBUF_SIMPLE)
- # view must hold the only reference to contiguous,
- # so memory is freed when view is released
- Py_DECREF(contiguous)
- buffer_len[0] = view.len
- buf[0] = <char*> view.buf
- return 1
- else:
- new_protocol[0] = 0
- if PyObject_AsReadBuffer(obj, <const void**> buf, buffer_len) == -1:
- raise BufferError("could not get memoryview")
- PyErr_WarnEx(RuntimeWarning,
- "using old buffer interface to unpack %s; "
- "this leads to unpacking errors if slicing is used and "
- "will be removed in a future version" % type(obj),
- 1)
- return 1
+ if PyObject_GetBuffer(obj, view, PyBUF_FULL_RO) == -1:
+ raise
+ if view.itemsize != 1:
+ PyBuffer_Release(view)
+ raise BufferError("cannot unpack from multi-byte object")
+ if PyBuffer_IsContiguous(view, b'A') == 0:
+ PyBuffer_Release(view)
+ # create a contiguous copy and get buffer
+ contiguous = PyMemoryView_GetContiguous(obj, PyBUF_READ, b'C')
+ PyObject_GetBuffer(contiguous, view, PyBUF_SIMPLE)
+ # view must hold the only reference to contiguous,
+ # so memory is freed when view is released
+ Py_DECREF(contiguous)
+ buffer_len[0] = view.len
+ buf[0] = <char*> view.buf
+ return 1
+
def unpackb(object packed, *, object object_hook=None, object list_hook=None,
bint use_list=True, bint raw=True, bint strict_map_key=False,
@@ -172,12 +160,11 @@ def unpackb(object packed, *, object object_hook=None, object list_hook=None,
cdef char* buf = NULL
cdef Py_ssize_t buf_len
cdef const char* cerr = NULL
- cdef int new_protocol = 0
if unicode_errors is not None:
cerr = unicode_errors
- get_data_from_buffer(packed, &view, &buf, &buf_len, &new_protocol)
+ get_data_from_buffer(packed, &view, &buf, &buf_len)
if max_str_len == -1:
max_str_len = buf_len
@@ -196,8 +183,7 @@ def unpackb(object packed, *, object object_hook=None, object list_hook=None,
max_str_len, max_bin_len, max_array_len, max_map_len, max_ext_len)
ret = unpack_construct(&ctx, buf, buf_len, &off)
finally:
- if new_protocol:
- PyBuffer_Release(&view);
+ PyBuffer_Release(&view);
if ret == 1:
obj = unpack_data(&ctx)
@@ -392,7 +378,6 @@ cdef class Unpacker(object):
def feed(self, object next_bytes):
"""Append `next_bytes` to internal buffer."""
cdef Py_buffer pybuff
- cdef int new_protocol = 0
cdef char* buf
cdef Py_ssize_t buf_len
@@ -400,12 +385,11 @@ cdef class Unpacker(object):
raise AssertionError(
"unpacker.feed() is not be able to use with `file_like`.")
- get_data_from_buffer(next_bytes, &pybuff, &buf, &buf_len, &new_protocol)
+ get_data_from_buffer(next_bytes, &pybuff, &buf, &buf_len)
try:
self.append_buffer(buf, buf_len)
finally:
- if new_protocol:
- PyBuffer_Release(&pybuff)
+ PyBuffer_Release(&pybuff)
cdef append_buffer(self, void* _buf, Py_ssize_t _buf_len):
cdef: