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:
Victor Stinner 2015-11-05 13:55:20 +01:00
parent 4d11a94fb6
commit 60a1d3cd15
1 changed files with 4 additions and 0 deletions

View File

@ -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))