https://github.com/python/cpython/commit/dc62b622524bf49eb539f444841049fdfbe2681e
commit: dc62b622524bf49eb539f444841049fdfbe2681e
branch: main
author: Sergey Miryanov <[email protected]>
committer: Fidget-Spinner <[email protected]>
date: 2025-11-24T22:07:45Z
summary:

GH-141861: Fix invalid memory read in the ENTER_EXECUTOR (GH-141921)

files:
A 
Misc/NEWS.d/next/Core_and_Builtins/2025-11-25-02-23-31.gh-issue-141861.QcMdcM.rst
M Lib/test/test_capi/test_opt.py
M Python/bytecodes.c
M Python/generated_cases.c.h

diff --git a/Lib/test/test_capi/test_opt.py b/Lib/test/test_capi/test_opt.py
index 58242f9ac3a01f..51234a2e40f54f 100644
--- a/Lib/test/test_capi/test_opt.py
+++ b/Lib/test/test_capi/test_opt.py
@@ -2662,6 +2662,38 @@ def f():
                               f" {executor} at offset {idx} rather"
                               f" than expected _EXIT_TRACE")
 
+    def test_enter_executor_valid_op_arg(self):
+        script_helper.assert_python_ok("-c", textwrap.dedent("""
+            import sys
+            sys.setrecursionlimit(30) # reduce time of the run
+
+            str_v1 = ''
+            tuple_v2 = (None, None, None, None, None)
+            small_int_v3 = 4
+
+            def f1():
+
+                for _ in range(10):
+                    abs(0)
+
+                tuple_v2[small_int_v3]
+                tuple_v2[small_int_v3]
+                tuple_v2[small_int_v3]
+
+                def recursive_wrapper_4569():
+                    str_v1 > str_v1
+                    str_v1 > str_v1
+                    str_v1 > str_v1
+                    recursive_wrapper_4569()
+
+                recursive_wrapper_4569()
+
+            for i_f1 in range(19000):
+                try:
+                    f1()
+                except RecursionError:
+                    pass
+        """))
 
 
 def global_identity(x):
diff --git 
a/Misc/NEWS.d/next/Core_and_Builtins/2025-11-25-02-23-31.gh-issue-141861.QcMdcM.rst
 
b/Misc/NEWS.d/next/Core_and_Builtins/2025-11-25-02-23-31.gh-issue-141861.QcMdcM.rst
new file mode 100644
index 00000000000000..4a115669998975
--- /dev/null
+++ 
b/Misc/NEWS.d/next/Core_and_Builtins/2025-11-25-02-23-31.gh-issue-141861.QcMdcM.rst
@@ -0,0 +1 @@
+Fix invalid memory read in the ``ENTER_EXECUTOR`` instruction.
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index 12ee506e4f2bc4..6129ea2e723273 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -3018,7 +3018,7 @@ dummy_func(
                 goto stop_tracing;
             }
             PyCodeObject *code = _PyFrame_GetCode(frame);
-            _PyExecutorObject *executor = code->co_executors->executors[oparg 
& 255];
+            _PyExecutorObject *executor = 
code->co_executors->executors[this_instr->op.arg];
             assert(executor->vm_data.index == INSTR_OFFSET() - 1);
             assert(executor->vm_data.code == code);
             assert(executor->vm_data.valid);
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index b83b7c528e9150..47805c270f9a0e 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -5476,7 +5476,7 @@
                 JUMP_TO_LABEL(stop_tracing);
             }
             PyCodeObject *code = _PyFrame_GetCode(frame);
-            _PyExecutorObject *executor = code->co_executors->executors[oparg 
& 255];
+            _PyExecutorObject *executor = 
code->co_executors->executors[this_instr->op.arg];
             assert(executor->vm_data.index == INSTR_OFFSET() - 1);
             assert(executor->vm_data.code == code);
             assert(executor->vm_data.valid);

_______________________________________________
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