[pypy-svn] r78491 - in pypy/branch/fast-forward/pypy/rlib: . test

afa at codespeak.net afa at codespeak.net
Fri Oct 29 23:28:58 CEST 2010


Author: afa
Date: Fri Oct 29 23:28:57 2010
New Revision: 78491

Modified:
   pypy/branch/fast-forward/pypy/rlib/rmmap.py
   pypy/branch/fast-forward/pypy/rlib/test/test_rmmap.py
Log:
Implement fix for CPython bug #2111:
mmap segfaults when trying to write a block opened with PROT_READ


Modified: pypy/branch/fast-forward/pypy/rlib/rmmap.py
==============================================================================
--- pypy/branch/fast-forward/pypy/rlib/rmmap.py	(original)
+++ pypy/branch/fast-forward/pypy/rlib/rmmap.py	Fri Oct 29 23:28:57 2010
@@ -591,6 +591,9 @@
         else:
             raise RValueError("mmap invalid access parameter.")
 
+        if prot == PROT_READ:
+            access = ACCESS_READ
+
         # check file size
         try:
             st = os.fstat(fd)

Modified: pypy/branch/fast-forward/pypy/rlib/test/test_rmmap.py
==============================================================================
--- pypy/branch/fast-forward/pypy/rlib/test/test_rmmap.py	(original)
+++ pypy/branch/fast-forward/pypy/rlib/test/test_rmmap.py	Fri Oct 29 23:28:57 2010
@@ -229,6 +229,16 @@
         interpret(func, [f.fileno()])
         f.close()
 
+    def test_write_readonly(self):
+        if os.name == "nt":
+            skip("Needs PROT_READ")
+        f = open(self.tmpname + "l", "w+")
+        f.write("foobar")
+        f.flush()
+        m = mmap.mmap(f.fileno(), 6, prot=mmap.PROT_READ)
+        raises(RTypeError, m.write, "foo")
+        f.close()
+
     def test_size(self):
         f = open(self.tmpname + "l", "w+")
         



More information about the Pypy-commit mailing list