diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-03-06 00:11:03 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-03-06 00:11:03 (GMT) |
commit | 16a0a0b0a0b42dd42f2206a864d6325a278796f7 (patch) | |
tree | a734d6acbfcbb5f28922d7f78bad4b01894f0a27 /Modules | |
parent | 3c2ccf293619dc05b39db609be8e2cde80e0fe70 (diff) | |
download | cpython-16a0a0b0a0b42dd42f2206a864d6325a278796f7.zip cpython-16a0a0b0a0b42dd42f2206a864d6325a278796f7.tar.gz cpython-16a0a0b0a0b42dd42f2206a864d6325a278796f7.tar.bz2 |
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.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/mmapmodule.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index c8c8cb2..f484a7a 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1075,17 +1075,22 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict) 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 */ |