Skip to content

Commit 6f9ca53

Browse files
authored
bpo-46347: Fix PyEval_EvalCodeEx to correctly cleanup in error paths (#30553)
1 parent b1a94f1 commit 6f9ca53

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

Python/ceval.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5090,7 +5090,7 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
50905090
PyObject *kwdefs, PyObject *closure)
50915091
{
50925092
PyThreadState *tstate = _PyThreadState_GET();
5093-
PyObject *res;
5093+
PyObject *res = NULL;
50945094
PyObject *defaults = _PyTuple_FromArray(defs, defcount);
50955095
if (defaults == NULL) {
50965096
return NULL;
@@ -5103,23 +5103,19 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
51035103
if (locals == NULL) {
51045104
locals = globals;
51055105
}
5106-
PyObject *kwnames;
5106+
PyObject *kwnames = NULL;
51075107
PyObject *const *allargs;
5108-
PyObject **newargs;
5108+
PyObject **newargs = NULL;
51095109
if (kwcount == 0) {
51105110
allargs = args;
5111-
kwnames = NULL;
51125111
}
51135112
else {
51145113
kwnames = PyTuple_New(kwcount);
51155114
if (kwnames == NULL) {
5116-
res = NULL;
51175115
goto fail;
51185116
}
51195117
newargs = PyMem_Malloc(sizeof(PyObject *)*(kwcount+argcount));
51205118
if (newargs == NULL) {
5121-
res = NULL;
5122-
Py_DECREF(kwnames);
51235119
goto fail;
51245120
}
51255121
for (int i = 0; i < argcount; i++) {
@@ -5149,11 +5145,9 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
51495145
res = _PyEval_Vector(tstate, &constr, locals,
51505146
allargs, argcount,
51515147
kwnames);
5152-
if (kwcount) {
5153-
Py_DECREF(kwnames);
5154-
PyMem_Free(newargs);
5155-
}
51565148
fail:
5149+
Py_XDECREF(kwnames);
5150+
PyMem_Free(newargs);
51575151
Py_DECREF(defaults);
51585152
return res;
51595153
}

0 commit comments

Comments
 (0)