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

Reply via email to