summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_mmap.py7
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/mmapmodule.c4
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 91d6275..2d87ead 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -426,6 +426,13 @@ class MmapTests(unittest.TestCase):
return mmap.mmap.__new__(klass, -1, *args, **kwargs)
anon_mmap(PAGESIZE)
+ def test_prot_readonly(self):
+ mapsize = 10
+ open(TESTFN, "wb").write("a"*mapsize)
+ f = open(TESTFN, "rb")
+ m = mmap.mmap(f.fileno(), mapsize, prot=mmap.PROT_READ)
+ self.assertRaises(TypeError, m.write, "foo")
+
def test_main():
run_unittest(MmapTests)
diff --git a/Misc/NEWS b/Misc/NEWS
index c4d64ce..fdc81c1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -1142,6 +1142,8 @@ Library
Extension Modules
-----------------
+- Bug #2111: mmap segfaults when trying to write a block opened with PROT_READ
+
- #2063: correct order of utime and stime in os.times() result on Windows.
- Patch #1736: Fix file name handling of _msi.FCICreate.
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 49fe7f7..e47211f 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -1122,6 +1122,10 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
"mmap invalid access parameter.");
}
+ if (prot == PROT_READ) {
+ access = ACCESS_READ;
+ }
+
#ifdef HAVE_FSTAT
# ifdef __VMS
/* on OpenVMS we must ensure that all bytes are written to the file */