Skip to content

Commit 2ab7e11

Browse files
[3.13] gh-130163: Fix a leak in _pickle.c after backporting (GH-130568)
1 parent 75358a8 commit 2ab7e11

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

Modules/_pickle.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,39 +1938,46 @@ whichmodule(PyObject *global, PyObject *dotted_path)
19381938
i = 0;
19391939
while (PyDict_Next(modules, &i, &module_name, &module)) {
19401940
if (_checkmodule(module_name, module, global, dotted_path) == 0) {
1941+
Py_DECREF(modules);
19411942
return Py_NewRef(module_name);
19421943
}
19431944
if (PyErr_Occurred()) {
1945+
Py_DECREF(modules);
19441946
return NULL;
19451947
}
19461948
}
19471949
}
19481950
else {
19491951
PyObject *iterator = PyObject_GetIter(modules);
19501952
if (iterator == NULL) {
1953+
Py_DECREF(modules);
19511954
return NULL;
19521955
}
19531956
while ((module_name = PyIter_Next(iterator))) {
19541957
module = PyObject_GetItem(modules, module_name);
19551958
if (module == NULL) {
19561959
Py_DECREF(module_name);
19571960
Py_DECREF(iterator);
1961+
Py_DECREF(modules);
19581962
return NULL;
19591963
}
19601964
if (_checkmodule(module_name, module, global, dotted_path) == 0) {
19611965
Py_DECREF(module);
19621966
Py_DECREF(iterator);
1967+
Py_DECREF(modules);
19631968
return module_name;
19641969
}
19651970
Py_DECREF(module);
19661971
Py_DECREF(module_name);
19671972
if (PyErr_Occurred()) {
19681973
Py_DECREF(iterator);
1974+
Py_DECREF(modules);
19691975
return NULL;
19701976
}
19711977
}
19721978
Py_DECREF(iterator);
19731979
}
1980+
Py_DECREF(modules);
19741981

19751982
/* If no module is found, use __main__. */
19761983
return &_Py_ID(__main__);

0 commit comments

Comments
 (0)