Skip to content

Commit de0867f

Browse files
jbrockmendeljreback
authored andcommitted
BLD: fix py37 build warnings (#26769)
1 parent 8b48f5c commit de0867f

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

pandas/io/msgpack/_unpacker.pyx

+13-6
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@ from cython cimport Py_ssize_t
55

66
from cpython cimport (
77
PyCallable_Check,
8-
PyBUF_SIMPLE, PyObject_GetBuffer, PyBuffer_Release,
8+
PyBUF_SIMPLE, PyObject_GetBuffer, PyBuffer_Release, Py_buffer,
99
PyBytes_Size,
1010
PyBytes_FromStringAndSize,
1111
PyBytes_AsString)
1212

1313
cdef extern from "Python.h":
1414
ctypedef struct PyObject
15-
cdef int PyObject_AsReadBuffer(object o, const void** buff,
16-
Py_ssize_t* buf_len) except -1
1715

1816
from libc.stdlib cimport free, malloc
1917
from libc.string cimport memcpy, memmove
@@ -129,8 +127,14 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
129127
Py_ssize_t buf_len
130128
char* cenc = NULL
131129
char* cerr = NULL
130+
Py_buffer view
131+
bytes extra_bytes
132132

133-
PyObject_AsReadBuffer(packed, <const void**>&buf, &buf_len)
133+
# GH#26769 Effectively re-implement deprecated PyObject_AsReadBuffer;
134+
# based on https://xpra.org/trac/ticket/1884
135+
PyObject_GetBuffer(packed, &view, PyBUF_SIMPLE)
136+
buf = <char*>view.buf
137+
buf_len = view.len
134138

135139
if encoding is not None:
136140
if isinstance(encoding, unicode):
@@ -149,10 +153,13 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
149153
if ret == 1:
150154
obj = unpack_data(&ctx)
151155
if <Py_ssize_t> off < buf_len:
152-
raise ExtraData(obj, PyBytes_FromStringAndSize(
153-
buf + off, buf_len - off))
156+
extra_bytes = PyBytes_FromStringAndSize(buf + off, buf_len - off)
157+
PyBuffer_Release(&view)
158+
raise ExtraData(obj, extra_bytes)
159+
PyBuffer_Release(&view)
154160
return obj
155161
else:
162+
PyBuffer_Release(&view)
156163
raise UnpackValueError("Unpack failed: error = {ret}".format(ret=ret))
157164

158165

0 commit comments

Comments
 (0)