fix: use-after-free in get_data_from_buffer

This commit is contained in:
Thomas Kowalski 2026-05-26 11:58:19 +02:00
parent 9086469e18
commit eae29a954e
No known key found for this signature in database
2 changed files with 3 additions and 4 deletions

View file

@ -130,9 +130,7 @@ cdef inline int get_data_from_buffer(object obj,
# 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

View file

@ -328,7 +328,8 @@ class Unpacker:
self._buf_checkpoint = 0
# Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython
self._buffer.extend(view)
# tobytes ensures compatibility with non-contiguous memoryviews
self._buffer.extend(view.tobytes())
view.release()
def _consume(self):