diff options
author | Nikita Sobolev <mail@sobolevn.me> | 2024-05-06 07:34:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-06 07:34:56 (GMT) |
commit | a8e5fed1007233f677d3539162257b99b920df00 (patch) | |
tree | d35b1bb9bcb00e37fcee7fa949c36d9ededca18a /Python/ceval.c | |
parent | 1506d5adc457a806e85886018804483e808d85c5 (diff) | |
download | cpython-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.c | 12 |
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 * |