mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #10451: memoryview objects could allow to mutate a readable buffer.
Initial patch by Ross Lagerwall.
This commit is contained in:
parent
c8a16867f6
commit
ad62b03949
4 changed files with 18 additions and 4 deletions
|
@ -381,8 +381,10 @@ class Bytes_TestCase(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, getargs_w_star, 'abc\xe9')
|
self.assertRaises(TypeError, getargs_w_star, 'abc\xe9')
|
||||||
self.assertRaises(TypeError, getargs_w_star, b'bytes')
|
self.assertRaises(TypeError, getargs_w_star, b'bytes')
|
||||||
self.assertRaises(TypeError, getargs_w_star, b'nul:\0')
|
self.assertRaises(TypeError, getargs_w_star, b'nul:\0')
|
||||||
|
self.assertRaises(TypeError, getargs_w_star, memoryview(b'bytes'))
|
||||||
self.assertEqual(getargs_w_star(bytearray(b'bytearray')), b'[ytearra]')
|
self.assertEqual(getargs_w_star(bytearray(b'bytearray')), b'[ytearra]')
|
||||||
self.assertEqual(getargs_w_star(memoryview(b'memoryview')), b'[emoryvie]')
|
self.assertEqual(getargs_w_star(memoryview(bytearray(b'memoryview'))),
|
||||||
|
b'[emoryvie]')
|
||||||
self.assertRaises(TypeError, getargs_w_star, None)
|
self.assertRaises(TypeError, getargs_w_star, None)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import sys
|
||||||
import gc
|
import gc
|
||||||
import weakref
|
import weakref
|
||||||
import array
|
import array
|
||||||
|
import io
|
||||||
|
|
||||||
|
|
||||||
class AbstractMemoryTests:
|
class AbstractMemoryTests:
|
||||||
|
@ -271,6 +272,17 @@ class AbstractMemoryTests:
|
||||||
m.release()
|
m.release()
|
||||||
self._check_released(m, tp)
|
self._check_released(m, tp)
|
||||||
|
|
||||||
|
def test_writable_readonly(self):
|
||||||
|
# Issue #10451: memoryview incorrectly exposes a readonly
|
||||||
|
# buffer as writable causing a segfault if using mmap
|
||||||
|
tp = self.ro_type
|
||||||
|
if tp is None:
|
||||||
|
return
|
||||||
|
b = tp(self._source)
|
||||||
|
m = self._view(b)
|
||||||
|
i = io.BytesIO(b'ZZZZ')
|
||||||
|
self.assertRaises(TypeError, i.readinto, m)
|
||||||
|
|
||||||
# Variations on source objects for the buffer: bytes-like objects, then arrays
|
# Variations on source objects for the buffer: bytes-like objects, then arrays
|
||||||
# with itemsize > 1.
|
# with itemsize > 1.
|
||||||
# NOTE: support for multi-dimensional objects is unimplemented.
|
# NOTE: support for multi-dimensional objects is unimplemented.
|
||||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.2 Release Candidate 2?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #10451: memoryview objects could allow to mutate a readable buffer.
|
||||||
|
Initial patch by Ross Lagerwall.
|
||||||
|
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,6 @@ memory_getbuf(PyMemoryViewObject *self, Py_buffer *view, int flags)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
CHECK_RELEASED_INT(self);
|
CHECK_RELEASED_INT(self);
|
||||||
/* XXX for whatever reason fixing the flags seems necessary */
|
|
||||||
if (self->view.readonly)
|
|
||||||
flags &= ~PyBUF_WRITABLE;
|
|
||||||
if (self->view.obj != NULL)
|
if (self->view.obj != NULL)
|
||||||
res = PyObject_GetBuffer(self->view.obj, view, flags);
|
res = PyObject_GetBuffer(self->view.obj, view, flags);
|
||||||
if (view)
|
if (view)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue