Issue #25556: Fix LOAD_GLOBAL bytecode when globals type is not dict and the
requested name doesn't exist in globals: clear the KeyError exception before calling PyObject_GetItem(). Fail also if the raised exception is not a KeyError.
This commit is contained in:
parent
4d11a94fb6
commit
60a1d3cd15
|
@ -2363,6 +2363,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
/* Slow-path if globals or builtins is not a dict */
|
/* Slow-path if globals or builtins is not a dict */
|
||||||
v = PyObject_GetItem(f->f_globals, name);
|
v = PyObject_GetItem(f->f_globals, name);
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
|
if (!PyErr_ExceptionMatches(PyExc_KeyError))
|
||||||
|
goto error;
|
||||||
|
PyErr_Clear();
|
||||||
|
|
||||||
v = PyObject_GetItem(f->f_builtins, name);
|
v = PyObject_GetItem(f->f_builtins, name);
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
if (PyErr_ExceptionMatches(PyExc_KeyError))
|
if (PyErr_ExceptionMatches(PyExc_KeyError))
|
||||||
|
|
Loading…
Reference in New Issue