mirror of https://github.com/python/cpython
Merge fix for issue #11391
This commit is contained in:
commit
80d3610bc3
|
@ -234,6 +234,14 @@ class MmapTests(unittest.TestCase):
|
||||||
flags=mmap.MAP_PRIVATE,
|
flags=mmap.MAP_PRIVATE,
|
||||||
prot=mmap.PROT_READ, access=mmap.ACCESS_WRITE)
|
prot=mmap.PROT_READ, access=mmap.ACCESS_WRITE)
|
||||||
|
|
||||||
|
# Try writing with PROT_EXEC and without PROT_WRITE
|
||||||
|
prot = mmap.PROT_READ | getattr(mmap, 'PROT_EXEC', 0)
|
||||||
|
with open(TESTFN, "r+b") as f:
|
||||||
|
m = mmap.mmap(f.fileno(), mapsize, prot=prot)
|
||||||
|
self.assertRaises(TypeError, m.write, b"abcdef")
|
||||||
|
self.assertRaises(TypeError, m.write_byte, 0)
|
||||||
|
m.close()
|
||||||
|
|
||||||
def test_bad_file_desc(self):
|
def test_bad_file_desc(self):
|
||||||
# Try opening a bad file descriptor...
|
# Try opening a bad file descriptor...
|
||||||
self.assertRaises(mmap.error, mmap.mmap, -2, 4096)
|
self.assertRaises(mmap.error, mmap.mmap, -2, 4096)
|
||||||
|
|
|
@ -31,6 +31,10 @@ Core and Builtins
|
||||||
Library
|
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 #11306: mailbox in certain cases adapts to an inability to open
|
- Issue #11306: mailbox in certain cases adapts to an inability to open
|
||||||
certain files in read-write mode. Previously it detected this by
|
certain files in read-write mode. Previously it detected this by
|
||||||
checking for EACCES, now it also checks for EROFS.
|
checking for EACCES, now it also checks for EROFS.
|
||||||
|
|
|
@ -1106,17 +1106,22 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
|
||||||
prot = PROT_READ | PROT_WRITE;
|
prot = PROT_READ | PROT_WRITE;
|
||||||
break;
|
break;
|
||||||
case ACCESS_DEFAULT:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
return PyErr_Format(PyExc_ValueError,
|
return PyErr_Format(PyExc_ValueError,
|
||||||
"mmap invalid access parameter.");
|
"mmap invalid access parameter.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prot == PROT_READ) {
|
|
||||||
access = ACCESS_READ;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_FSTAT
|
#ifdef HAVE_FSTAT
|
||||||
# ifdef __VMS
|
# ifdef __VMS
|
||||||
/* on OpenVMS we must ensure that all bytes are written to the file */
|
/* on OpenVMS we must ensure that all bytes are written to the file */
|
||||||
|
|
Loading…
Reference in New Issue