bpo-1635741: Fix ref leak in _PyWarnings_Init() error path (GH-23151)

Replace PyModule_AddObject() with PyModule_AddObjectRef() in the
_warnings module to fix a reference leak on error.

Use also PyModule_AddObjectRef() in importdl.c.
This commit is contained in:
Victor Stinner 2020-11-04 17:33:06 +01:00 committed by GitHub
parent 18ce7f1d0a
commit 58ca33b467
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 11 deletions

View File

@ -1395,18 +1395,13 @@ _PyWarnings_Init(void)
goto error; goto error;
} }
Py_INCREF(st->filters); if (PyModule_AddObjectRef(m, "filters", st->filters) < 0) {
if (PyModule_AddObject(m, "filters", st->filters) < 0) {
goto error; goto error;
} }
if (PyModule_AddObjectRef(m, "_onceregistry", st->once_registry) < 0) {
Py_INCREF(st->once_registry);
if (PyModule_AddObject(m, "_onceregistry", st->once_registry) < 0) {
goto error; goto error;
} }
if (PyModule_AddObjectRef(m, "_defaultaction", st->default_action) < 0) {
Py_INCREF(st->default_action);
if (PyModule_AddObject(m, "_defaultaction", st->default_action) < 0) {
goto error; goto error;
} }

View File

@ -220,10 +220,9 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp)
def->m_base.m_init = p0; def->m_base.m_init = p0;
/* Remember the filename as the __file__ attribute */ /* Remember the filename as the __file__ attribute */
if (PyModule_AddObject(m, "__file__", path) < 0) if (PyModule_AddObjectRef(m, "__file__", path) < 0) {
PyErr_Clear(); /* Not important enough to report */ PyErr_Clear(); /* Not important enough to report */
else }
Py_INCREF(path);
PyObject *modules = PyImport_GetModuleDict(); PyObject *modules = PyImport_GetModuleDict();
if (_PyImport_FixupExtensionObject(m, name_unicode, path, modules) < 0) if (_PyImport_FixupExtensionObject(m, name_unicode, path, modules) < 0)