prot=mmap.PROT_READ, access=mmap.ACCESS_WRITE)
f.close()
+ # Try writting without PROT_WRITE
+ with open(TESTFN, "r+b") as f:
+ m = mmap.mmap(f.fileno(), mapsize, prot=~mmap.PROT_WRITE)
+ self.assertRaises(TypeError, m.write, b"abcdef")
+ self.assertRaises(TypeError, m.write_byte, 0)
+ m.close()
+
+
def test_bad_file_desc(self):
# Try opening a bad file descriptor...
self.assertRaises(mmap.error, mmap.mmap, -2, 4096)
John Nagle
Takahiro Nakayama
Travers Naran
+Charles-François Natali
Fredrik Nehr
Trent Nelson
Tony Nelson
Library
-------
+- Issue #11391: Writing to a mmap object created with
+ ``mmap.PROT_READ|mmap.PROT_EXEC`` would segfault instead of raising a
+ TypeError. Patch by Charles-François Natali.
+
- Issue #11265: asyncore now correctly handles EPIPE, EBADF and EAGAIN errors
on accept(), send() and recv().
prot = PROT_READ | PROT_WRITE;
break;
case ACCESS_DEFAULT:
- /* use the specified or default values of flags and prot */
+ /* map prot to access type */
+ if ((prot & PROT_READ) && (prot & PROT_WRITE)) {
+ /* ACCESS_DEFAULT */
+ }
+ else if (prot & PROT_WRITE) {
+ access = ACCESS_WRITE;
+ }
+ else {
+ access = ACCESS_READ;
+ }
break;
default:
return PyErr_Format(PyExc_ValueError,
"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 */