Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions Lib/test/test_capi/test_opt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix invalid memory read in the ``ENTER_EXECUTOR`` instruction.
2 changes: 1 addition & 1 deletion Python/bytecodes.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion Python/generated_cases.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading