diff -r d4e73dff92fc Lib/test/test_memoryview.py --- a/Lib/test/test_memoryview.py Tue Jan 18 01:30:24 2011 +0100 +++ b/Lib/test/test_memoryview.py Tue Jan 18 18:47:45 2011 +0200 @@ -9,6 +9,7 @@ import gc import weakref import array +import io class AbstractMemoryTests: @@ -202,6 +203,14 @@ m = None self.assertEqual(sys.getrefcount(b), oldrefcount) + def test_issue10451(self): + # issue10451: memoryview incorrectly exposes a readonly + # buffer as writable causing a segfault if using mmap + b = b"XXXX" + m = memoryview(b) + i = io.BytesIO(b'ZZZZ') + self.assertRaises(TypeError, i.readinto, m) + def test_gc(self): for tp in self._types: if not isinstance(tp, type): diff -r d4e73dff92fc Objects/memoryobject.c --- a/Objects/memoryobject.c Tue Jan 18 01:30:24 2011 +0100 +++ b/Objects/memoryobject.c Tue Jan 18 18:47:45 2011 +0200 @@ -52,9 +52,6 @@ { int res = 0; 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) res = PyObject_GetBuffer(self->view.obj, view, flags); if (view)