]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 88097 via svnmerge from
authorAntoine Pitrou <solipsis@pitrou.net>
Tue, 18 Jan 2011 19:06:09 +0000 (19:06 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Tue, 18 Jan 2011 19:06:09 +0000 (19:06 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r88097 | antoine.pitrou | 2011-01-18 19:57:52 +0100 (mar., 18 janv. 2011) | 4 lines

  Issue #10451: memoryview objects could allow to mutate a readable buffer.
  Initial patch by Ross Lagerwall.
........

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

index fd820b69e851f8dc219207bf6107b165f242ac44..52fa3a935ff31a74a72acf71d620de945e100f38 100644 (file)
@@ -9,6 +9,7 @@ import sys
 import gc
 import weakref
 import array
+import io
 
 
 class AbstractMemoryTests:
@@ -225,6 +226,16 @@ class AbstractMemoryTests:
             gc.collect()
             self.assertTrue(wr() is None, wr())
 
+    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.
index 1495bdd32670cd9a530ff67ba59f3481412d13b6..abc496bdb284c8c47def3453fd4406f532a2fdee 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.1.4?
 Core and Builtins
 -----------------
 
+- Issue #10451: memoryview objects could allow to mutate a readable buffer.
+  Initial patch by Ross Lagerwall.
+
 - Issue #10892: Don't segfault when trying to delete __abstractmethods__ from a
   class.
 
index f5dacb04f20d0fa5ce20843d93b9538c47a2328a..9b77ea726c1793ed0e2444acb4373bc01450f1fa 100644 (file)
@@ -34,9 +34,6 @@ static int
 memory_getbuf(PyMemoryViewObject *self, Py_buffer *view, int flags)
 {
     int res = 0;
-    /* 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)