[pypy-commit] pypy py3.5: Check for NULL in PyMemoryView_FromBuffer
rlamy
pypy.commits at gmail.com
Tue Nov 14 16:14:47 EST 2017
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3.5
Changeset: r93022:57dc41aeb601
Date: 2017-11-14 21:14 +0000
http://bitbucket.org/pypy/pypy/changeset/57dc41aeb601/
Log: Check for NULL in PyMemoryView_FromBuffer
diff --git a/pypy/module/cpyext/memoryobject.py b/pypy/module/cpyext/memoryobject.py
--- a/pypy/module/cpyext/memoryobject.py
+++ b/pypy/module/cpyext/memoryobject.py
@@ -201,6 +201,10 @@
The memoryview object then owns the buffer represented by view, which
means you shouldn't try to call PyBuffer_Release() yourself: it
will be done on deallocation of the memoryview object."""
+ if not view.c_buf:
+ raise oefmt(space.w_ValueError,
+ "PyMemoryView_FromBuffer(): info->buf must not be NULL")
+
# XXX this should allocate a PyMemoryViewObject and
# copy view into obj.c_view, without creating a new view.c_obj
typedescr = get_typedescr(W_MemoryView.typedef)
diff --git a/pypy/module/cpyext/test/test_memoryobject.py b/pypy/module/cpyext/test/test_memoryobject.py
--- a/pypy/module/cpyext/test/test_memoryobject.py
+++ b/pypy/module/cpyext/test/test_memoryobject.py
@@ -255,3 +255,13 @@
""")])
mv = module.new()
assert mv.tobytes() == b'hell'
+
+ def test_FromBuffer_NULL(self):
+ module = self.import_extension('foo', [
+ ('new', 'METH_NOARGS', """
+ Py_buffer info;
+ if (PyBuffer_FillInfo(&info, NULL, NULL, 1, 1, PyBUF_FULL_RO) < 0)
+ return NULL;
+ return PyMemoryView_FromBuffer(&info);
+ """)])
+ raises(ValueError, module.new)
More information about the pypy-commit
mailing list