summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2024-05-06 07:34:56 (GMT)
committerGitHub <noreply@github.com>2024-05-06 07:34:56 (GMT)
commita8e5fed1007233f677d3539162257b99b920df00 (patch)
treed35b1bb9bcb00e37fcee7fa949c36d9ededca18a /Python/ceval.c
parent1506d5adc457a806e85886018804483e808d85c5 (diff)
downloadcpython-a8e5fed1007233f677d3539162257b99b920df00.zip
cpython-a8e5fed1007233f677d3539162257b99b920df00.tar.gz
cpython-a8e5fed1007233f677d3539162257b99b920df00.tar.bz2
gh-118613: Fix error handling of `_PyEval_GetFrameLocals` in `ceval.c` (#118614)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 0d02a98..128e041 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2496,17 +2496,21 @@ _PyEval_GetFrameLocals(void)
if (PyFrameLocalsProxy_Check(locals)) {
PyObject* ret = PyDict_New();
- if (PyDict_Update(ret, locals)) {
+ if (ret == NULL) {
+ Py_DECREF(locals);
+ return NULL;
+ }
+ if (PyDict_Update(ret, locals) < 0) {
Py_DECREF(ret);
+ Py_DECREF(locals);
return NULL;
}
Py_DECREF(locals);
return ret;
- } else if (PyMapping_Check(locals)) {
- return locals;
}
- return NULL;
+ assert(PyMapping_Check(locals));
+ return locals;
}
PyObject *