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:
parent
18ce7f1d0a
commit
58ca33b467
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue