summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2023-08-10 11:29:06 (GMT)
committerGitHub <noreply@github.com>2023-08-10 11:29:06 (GMT)
commit494e3d4436774a5ac1a569a635b8c5c881ef1c0c (patch)
tree46132b852f0f16f15e41c58755dc6bcc7c89e011
parent39ef93edb9802dccdb6555d4209ac2e60875a011 (diff)
downloadcpython-494e3d4436774a5ac1a569a635b8c5c881ef1c0c.zip
cpython-494e3d4436774a5ac1a569a635b8c5c881ef1c0c.tar.gz
cpython-494e3d4436774a5ac1a569a635b8c5c881ef1c0c.tar.bz2
GH-107774: Add missing audit event for PEP 669 (GH-107775)
-rw-r--r--Lib/test/audit-tests.py11
-rw-r--r--Lib/test/test_audit.py13
-rw-r--r--Misc/NEWS.d/next/Security/2023-08-05-03-51-05.gh-issue-107774.VPjaTR.rst3
-rw-r--r--Python/instrumentation.c3
4 files changed, 30 insertions, 0 deletions
diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py
index 0edc9d9..9504829 100644
--- a/Lib/test/audit-tests.py
+++ b/Lib/test/audit-tests.py
@@ -514,6 +514,17 @@ def test_not_in_gc():
assert hook not in o
+def test_sys_monitoring_register_callback():
+ import sys
+
+ def hook(event, args):
+ if event.startswith("sys.monitoring"):
+ print(event, args)
+
+ sys.addaudithook(hook)
+ sys.monitoring.register_callback(1, 1, None)
+
+
if __name__ == "__main__":
from test.support import suppress_msvcrt_asserts
diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py
index 0b69864..b12ffa5 100644
--- a/Lib/test/test_audit.py
+++ b/Lib/test/test_audit.py
@@ -257,5 +257,18 @@ class AuditTest(unittest.TestCase):
self.fail(stderr)
+ def test_sys_monitoring_register_callback(self):
+ returncode, events, stderr = self.run_python("test_sys_monitoring_register_callback")
+ if returncode:
+ self.fail(stderr)
+
+ if support.verbose:
+ print(*events, sep='\n')
+ actual = [(ev[0], ev[2]) for ev in events]
+ expected = [("sys.monitoring.register_callback", "(None,)")]
+
+ self.assertEqual(actual, expected)
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Security/2023-08-05-03-51-05.gh-issue-107774.VPjaTR.rst b/Misc/NEWS.d/next/Security/2023-08-05-03-51-05.gh-issue-107774.VPjaTR.rst
new file mode 100644
index 0000000..b89b50c
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2023-08-05-03-51-05.gh-issue-107774.VPjaTR.rst
@@ -0,0 +1,3 @@
+PEP 669 specifies that ``sys.monitoring.register_callback`` will generate an
+audit event. Pre-releases of Python 3.12 did not generate the audit event.
+This is now fixed.
diff --git a/Python/instrumentation.c b/Python/instrumentation.c
index 65ea790..64684ad 100644
--- a/Python/instrumentation.c
+++ b/Python/instrumentation.c
@@ -1851,6 +1851,9 @@ monitoring_register_callback_impl(PyObject *module, int tool_id, int event,
PyErr_Format(PyExc_ValueError, "invalid event %d", event);
return NULL;
}
+ if (PySys_Audit("sys.monitoring.register_callback", "O", func) < 0) {
+ return NULL;
+ }
if (func == Py_None) {
func = NULL;
}