Bug #2111: mmap segfaults when trying to write a block opened with PROT_READ
Thanks to Thomas Herve for the fix.
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 @@
                 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 @@
 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 @@
 				    "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 */