https://github.com/python/cpython/commit/fecf8bc8f2fd09a9a4c5177d32dbb42920b4e177 commit: fecf8bc8f2fd09a9a4c5177d32dbb42920b4e177 branch: main author: Petr Viktorin <encu...@gmail.com> committer: markshannon <m...@hotpy.org> date: 2025-02-28T08:58:50Z summary:
gh-130595: Fix leak in WITH_EXCEPT_START error case (GH-130626) Co-authored-by: Ken Jin <ken...@python.org> files: M Python/bytecodes.c M Python/executor_cases.c.h M Python/generated_cases.c.h diff --git a/Python/bytecodes.c b/Python/bytecodes.c index dc709a7c053835..1b9b651fd01539 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -3317,8 +3317,8 @@ dummy_func( int has_self = !PyStackRef_IsNull(exit_self); PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self, (3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); - ERROR_IF(res_o == NULL, error); Py_XDECREF(original_tb); + ERROR_IF(res_o == NULL, error); res = PyStackRef_FromPyObjectSteal(res_o); } diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 5468fc41629452..6ae88a817244b1 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -4437,13 +4437,11 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self, (3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); + Py_XDECREF(original_tb); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { JUMP_TO_ERROR(); } - _PyFrame_SetStackPointer(frame, stack_pointer); - Py_XDECREF(original_tb); - stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[0] = res; stack_pointer += 1; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 5f1198699c4f75..564e5be92ae789 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -11907,13 +11907,11 @@ _PyFrame_SetStackPointer(frame, stack_pointer); PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self, (3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); + Py_XDECREF(original_tb); stack_pointer = _PyFrame_GetStackPointer(frame); if (res_o == NULL) { JUMP_TO_LABEL(error); } - _PyFrame_SetStackPointer(frame, stack_pointer); - Py_XDECREF(original_tb); - stack_pointer = _PyFrame_GetStackPointer(frame); res = PyStackRef_FromPyObjectSteal(res_o); stack_pointer[0] = res; stack_pointer += 1; _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com