From afa680089f7387c60ccf0158c537649de8650c75 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 26 Feb 2025 12:05:50 +0200 Subject: [PATCH] [3.13] gh-130163: Fix a leak in _pickle.c after backporting --- Modules/_pickle.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Modules/_pickle.c b/Modules/_pickle.c index edb2c116585880..1ef380d1cd7933 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -1938,9 +1938,11 @@ whichmodule(PyObject *global, PyObject *dotted_path) i = 0; while (PyDict_Next(modules, &i, &module_name, &module)) { if (_checkmodule(module_name, module, global, dotted_path) == 0) { + Py_DECREF(modules); return Py_NewRef(module_name); } if (PyErr_Occurred()) { + Py_DECREF(modules); return NULL; } } @@ -1948,6 +1950,7 @@ whichmodule(PyObject *global, PyObject *dotted_path) else { PyObject *iterator = PyObject_GetIter(modules); if (iterator == NULL) { + Py_DECREF(modules); return NULL; } while ((module_name = PyIter_Next(iterator))) { @@ -1955,22 +1958,26 @@ whichmodule(PyObject *global, PyObject *dotted_path) if (module == NULL) { Py_DECREF(module_name); Py_DECREF(iterator); + Py_DECREF(modules); return NULL; } if (_checkmodule(module_name, module, global, dotted_path) == 0) { Py_DECREF(module); Py_DECREF(iterator); + Py_DECREF(modules); return module_name; } Py_DECREF(module); Py_DECREF(module_name); if (PyErr_Occurred()) { Py_DECREF(iterator); + Py_DECREF(modules); return NULL; } } Py_DECREF(iterator); } + Py_DECREF(modules); /* If no module is found, use __main__. */ return &_Py_ID(__main__);