summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-03-18 13:51:24 (GMT)
committerGitHub <noreply@github.com>2021-03-18 13:51:24 (GMT)
commitfc980e0be19776ee05dfc5380eb5d6a8092935cb (patch)
treec0787fde92f0cdd00c609c5089be97fad7d01618 /Python/ceval.c
parent6af528b4ab342805534c0bfe61d84ed7bb519468 (diff)
downloadcpython-fc980e0be19776ee05dfc5380eb5d6a8092935cb.zip
cpython-fc980e0be19776ee05dfc5380eb5d6a8092935cb.tar.gz
cpython-fc980e0be19776ee05dfc5380eb5d6a8092935cb.tar.bz2
bpo-43541: Fix PyEval_EvalCodeEx() regression (GH-24918)
* Remove an assertion which required CO_NEWLOCALS and CO_OPTIMIZED code flags. It is ok to call this function on a code with these flags set. * Fix reference counting on builtins: remove Py_DECREF(). Fix regression introduced in the commit 46496f9d12582bf11f4911ad0f23315d6f277907. Add also a comment to document that _PyEval_BuiltinsFromGlobals() returns a borrowed reference.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 7418b15..3a37017 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1127,7 +1127,7 @@ PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
if (locals == NULL) {
locals = globals;
}
- PyObject *builtins = _PyEval_BuiltinsFromGlobals(tstate, globals);
+ PyObject *builtins = _PyEval_BuiltinsFromGlobals(tstate, globals); // borrowed ref
if (builtins == NULL) {
return NULL;
}
@@ -5140,12 +5140,11 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
if (defaults == NULL) {
return NULL;
}
- PyObject *builtins = _PyEval_BuiltinsFromGlobals(tstate, globals);
+ PyObject *builtins = _PyEval_BuiltinsFromGlobals(tstate, globals); // borrowed ref
if (builtins == NULL) {
Py_DECREF(defaults);
return NULL;
}
- assert ((((PyCodeObject *)_co)->co_flags & (CO_NEWLOCALS | CO_OPTIMIZED)) == 0);
if (locals == NULL) {
locals = globals;
}
@@ -5208,7 +5207,6 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
}
fail:
Py_DECREF(defaults);
- Py_DECREF(builtins);
return res;
}