diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-01-18 19:06:09 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-01-18 19:06:09 (GMT) |
commit | 566facd39b90595b1b7ab61a26c77e426ac22c73 (patch) | |
tree | 002b459ea188474c49d112b18f98469ca15bfffc | |
parent | cbb98950db66e17ffb3219d1d19a001a6b4020cc (diff) | |
download | cpython-566facd39b90595b1b7ab61a26c77e426ac22c73.zip cpython-566facd39b90595b1b7ab61a26c77e426ac22c73.tar.gz cpython-566facd39b90595b1b7ab61a26c77e426ac22c73.tar.bz2 |
Merged revisions 88097 via svnmerge from
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.
........
-rw-r--r-- | Lib/test/test_memoryview.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/memoryobject.c | 3 |
3 files changed, 14 insertions, 3 deletions
diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py index fd820b6..52fa3a9 100644 --- a/Lib/test/test_memoryview.py +++ b/Lib/test/test_memoryview.py @@ -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. @@ -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. diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index f5dacb0..9b77ea7 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -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) |