diff options
author | Brandt Bucher <brandtbucher@microsoft.com> | 2022-11-11 11:30:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-11 11:30:21 (GMT) |
commit | 1119ee4f7e4dc3c40c6535db72d4885e3dd08ebb (patch) | |
tree | 4d4a43a1f8d98c59f2ab6e62704ed231eb39592f /Python | |
parent | b31b64570a500010738f21ae4a157c834e90301c (diff) | |
download | cpython-1119ee4f7e4dc3c40c6535db72d4885e3dd08ebb.zip cpython-1119ee4f7e4dc3c40c6535db72d4885e3dd08ebb.tar.gz cpython-1119ee4f7e4dc3c40c6535db72d4885e3dd08ebb.tar.bz2 |
[3.11] GH-99298: Don't perform jumps before error handling (GH-99343)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index c0d9c68..b4ebf0c 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2158,6 +2158,7 @@ handle_eval_breaker: PyObject *container = SECOND(); next_instr--; if (_Py_Specialize_BinarySubscr(container, sub, next_instr) < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -2323,6 +2324,7 @@ handle_eval_breaker: PyObject *container = SECOND(); next_instr--; if (_Py_Specialize_StoreSubscr(container, sub, next_instr) < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -3056,6 +3058,7 @@ handle_eval_breaker: PyObject *name = GETITEM(names, oparg>>1); next_instr--; if (_Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name) < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -3481,6 +3484,7 @@ handle_eval_breaker: PyObject *name = GETITEM(names, oparg); next_instr--; if (_Py_Specialize_LoadAttr(owner, next_instr, name) < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -3590,6 +3594,7 @@ handle_eval_breaker: PyObject *name = GETITEM(names, oparg); next_instr--; if (_Py_Specialize_StoreAttr(owner, next_instr, name) < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -4527,6 +4532,7 @@ handle_eval_breaker: PyObject *name = GETITEM(names, oparg); next_instr--; if (_Py_Specialize_LoadMethod(owner, next_instr, name) < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -4801,6 +4807,7 @@ handle_eval_breaker: int err = _Py_Specialize_Precall(callable, next_instr, nargs, call_shape.kwnames, oparg); if (err < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -4822,6 +4829,7 @@ handle_eval_breaker: int err = _Py_Specialize_Call(callable, next_instr, nargs, call_shape.kwnames); if (err < 0) { + next_instr++; goto error; } DISPATCH_SAME_OPARG(); @@ -5184,9 +5192,6 @@ handle_eval_breaker: PyObject *list = SECOND(); DEOPT_IF(!PyList_Check(list), PRECALL); STAT_INC(PRECALL, hit); - // PRECALL + CALL + POP_TOP - JUMPBY(INLINE_CACHE_ENTRIES_PRECALL + 1 + INLINE_CACHE_ENTRIES_CALL + 1); - assert(_Py_OPCODE(next_instr[-1]) == POP_TOP); PyObject *arg = POP(); if (_PyList_AppendTakeRef((PyListObject *)list, arg) < 0) { goto error; @@ -5194,6 +5199,9 @@ handle_eval_breaker: STACK_SHRINK(2); Py_DECREF(list); Py_DECREF(callable); + // PRECALL + CALL + POP_TOP + JUMPBY(INLINE_CACHE_ENTRIES_PRECALL + 1 + INLINE_CACHE_ENTRIES_CALL + 1); + assert(_Py_OPCODE(next_instr[-1]) == POP_TOP); DISPATCH(); } |