]> granicus.if.org Git - python/commitdiff
Issue #10451: memoryview objects could allow to mutate a readable buffer.
authorAntoine Pitrou <solipsis@pitrou.net>
Tue, 18 Jan 2011 18:57:52 +0000 (18:57 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Tue, 18 Jan 2011 18:57:52 +0000 (18:57 +0000)
Initial patch by Ross Lagerwall.

Lib/test/test_getargs2.py
Lib/test/test_memoryview.py
Misc/NEWS
Objects/memoryobject.c

index e8f4fc23f344785b3fab621d062f949a55633040..3d9c06a4607cea5b8c63526c9ff982e390138cc9 100644 (file)
@@ -381,8 +381,10 @@ class Bytes_TestCase(unittest.TestCase):
         self.assertRaises(TypeError, getargs_w_star, 'abc\xe9')
         self.assertRaises(TypeError, getargs_w_star, b'bytes')
         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(memoryview(b'memoryview')), b'[emoryvie]')
+        self.assertEqual(getargs_w_star(memoryview(bytearray(b'memoryview'))),
+                         b'[emoryvie]')
         self.assertRaises(TypeError, getargs_w_star, None)
 
 
index 9a52fe9091707bcdcd792db51ae12e7df605adcd..0bfddd97ed646d55aed611b7a0c9f5dca6b6def9 100644 (file)
@@ -9,6 +9,7 @@ import sys
 import gc
 import weakref
 import array
+import io
 
 
 class AbstractMemoryTests:
@@ -271,6 +272,17 @@ class AbstractMemoryTests:
             m.release()
             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
 # with itemsize > 1.
 # NOTE: support for multi-dimensional objects is unimplemented.
index 071ad42490a317a4f49bb0d1081634207690e8ed..1bc3b2fc0b54aa67183f2cadf0256a79901f1eff 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.2 Release Candidate 2?
 Core and Builtins
 -----------------
 
+- Issue #10451: memoryview objects could allow to mutate a readable buffer.
+  Initial patch by Ross Lagerwall.
+
 Library
 -------
 
index a05b97b977bfeddf80b48d909831296dda064c01..7782076a5b50a15dd5cd7602aa386d925525cba2 100644 (file)
@@ -52,9 +52,6 @@ memory_getbuf(PyMemoryViewObject *self, Py_buffer *view, int flags)
 {
     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)