https://github.com/python/cpython/commit/70b07aa4153c1a914a3d69307d5b258cf7ed16ab
commit: 70b07aa4153c1a914a3d69307d5b258cf7ed16ab
branch: main
author: scoder <[email protected]>
committer: iritkatriel <[email protected]>
date: 2024-05-26T12:37:33Z
summary:

gh-111997: Fix argument count for LINE event and clarify type of argument 
counts. (#119179)

files:
M Python/instrumentation.c

diff --git a/Python/instrumentation.c b/Python/instrumentation.c
index 9095fb981b7981..a5211ee5428cf8 100644
--- a/Python/instrumentation.c
+++ b/Python/instrumentation.c
@@ -893,7 +893,7 @@ remove_per_instruction_tools(PyCodeObject * code, int 
offset, int tools)
 static int
 call_one_instrument(
     PyInterpreterState *interp, PyThreadState *tstate, PyObject **args,
-    Py_ssize_t nargsf, int8_t tool, int event)
+    size_t nargsf, int8_t tool, int event)
 {
     assert(0 <= tool && tool < 8);
     assert(tstate->tracing == 0);
@@ -1084,7 +1084,7 @@ call_instrumentation_vector(
     args[2] = offset_obj;
     PyInterpreterState *interp = tstate->interp;
     uint8_t tools = get_tools_for_instruction(code, interp, offset, event);
-    Py_ssize_t nargsf = nargs | PY_VECTORCALL_ARGUMENTS_OFFSET;
+    size_t nargsf = (size_t) nargs | PY_VECTORCALL_ARGUMENTS_OFFSET;
     PyObject **callargs = &args[1];
     int err = 0;
     while (tools) {
@@ -2439,13 +2439,15 @@ capi_call_instrumentation(PyMonitoringState *state, 
PyObject *codelike, int32_t
         PyErr_SetString(PyExc_ValueError, "offset must be non-negative");
         return -1;
     }
-    PyObject *offset_obj = PyLong_FromLong(offset);
-    if (offset_obj == NULL) {
-        return -1;
+    if (event != PY_MONITORING_EVENT_LINE) {
+        PyObject *offset_obj = PyLong_FromLong(offset);
+        if (offset_obj == NULL) {
+            return -1;
+        }
+        assert(args[2] == NULL);
+        args[2] = offset_obj;
     }
-    assert(args[2] == NULL);
-    args[2] = offset_obj;
-    Py_ssize_t nargsf = nargs | PY_VECTORCALL_ARGUMENTS_OFFSET;
+    size_t nargsf = (size_t) nargs | PY_VECTORCALL_ARGUMENTS_OFFSET;
     PyObject **callargs = &args[1];
     int err = 0;
 
@@ -2565,8 +2567,8 @@ _PyMonitoring_FireLineEvent(PyMonitoringState *state, 
PyObject *codelike, int32_
     if (lno == NULL) {
         return -1;
     }
-    PyObject *args[4] = { NULL, NULL, NULL, lno };
-    int res= capi_call_instrumentation(state, codelike, offset, args, 3,
+    PyObject *args[3] = { NULL, NULL, lno };
+    int res= capi_call_instrumentation(state, codelike, offset, args, 2,
                                        PY_MONITORING_EVENT_LINE);
     Py_DECREF(lno);
     return res;

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to