bpo-37316: mmap.mmap() passes the wrong variable to PySys_Audit() (GH-14152)

Also, add a missing call to va_end() in PySys_Audit().
This commit is contained in:
Zackery Spytz 2019-06-21 09:31:59 -06:00 committed by Steve Dower
parent 08970cb03c
commit 08286d52b2
5 changed files with 13 additions and 1 deletions

View File

@ -261,6 +261,13 @@ def test_cantrace():
assertSequenceEqual(["call"] * 4, traced)
def test_mmap():
import mmap
with TestHook() as hook:
mmap.mmap(-1, 8)
assertEqual(hook.seen[0][1][:2], (-1, 8))
if __name__ == "__main__":
from test.libregrtest.setup import suppress_msvcrt_asserts
suppress_msvcrt_asserts(False)

View File

@ -74,6 +74,9 @@ class AuditTest(unittest.TestCase):
def test_cantrace(self):
self.do_test("test_cantrace")
def test_mmap(self):
self.do_test("test_mmap")
if __name__ == "__main__":
unittest.main()

View File

@ -0,0 +1 @@
Fix the :c:func:`PySys_Audit` call in :class:`mmap.mmap`.

View File

@ -1154,7 +1154,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
}
if (PySys_Audit("mmap.__new__", "ini" _Py_PARSE_OFF_T,
fileno, map_size, access, offset) < 0) {
fd, map_size, access, offset) < 0) {
return NULL;
}

View File

@ -182,6 +182,7 @@ PySys_Audit(const char *event, const char *argFormat, ...)
va_list args;
va_start(args, argFormat);
eventArgs = Py_VaBuildValue(argFormat, args);
va_end(args);
if (eventArgs && !PyTuple_Check(eventArgs)) {
PyObject *argTuple = PyTuple_Pack(1, eventArgs);
Py_DECREF(eventArgs);