summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-11-04 16:33:06 (GMT)
committerGitHub <noreply@github.com>2020-11-04 16:33:06 (GMT)
commit58ca33b4674f39189b03c9a39fa7b676b43b3d08 (patch)
treefa25afd9e677de7e2c113816ae199551240a4158 /Python
parent18ce7f1d0a3d65f34f25c5964da588743a1bfe3c (diff)
downloadcpython-58ca33b4674f39189b03c9a39fa7b676b43b3d08.zip
cpython-58ca33b4674f39189b03c9a39fa7b676b43b3d08.tar.gz
cpython-58ca33b4674f39189b03c9a39fa7b676b43b3d08.tar.bz2
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.
Diffstat (limited to 'Python')
-rw-r--r--Python/_warnings.c11
-rw-r--r--Python/importdl.c5
2 files changed, 5 insertions, 11 deletions
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 3c048af..e42b7c3 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -1395,18 +1395,13 @@ _PyWarnings_Init(void)
goto error;
}
- Py_INCREF(st->filters);
- if (PyModule_AddObject(m, "filters", st->filters) < 0) {
+ if (PyModule_AddObjectRef(m, "filters", st->filters) < 0) {
goto error;
}
-
- Py_INCREF(st->once_registry);
- if (PyModule_AddObject(m, "_onceregistry", st->once_registry) < 0) {
+ if (PyModule_AddObjectRef(m, "_onceregistry", st->once_registry) < 0) {
goto error;
}
-
- Py_INCREF(st->default_action);
- if (PyModule_AddObject(m, "_defaultaction", st->default_action) < 0) {
+ if (PyModule_AddObjectRef(m, "_defaultaction", st->default_action) < 0) {
goto error;
}
diff --git a/Python/importdl.c b/Python/importdl.c
index fbeb9fb..1847eba 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -220,10 +220,9 @@ _PyImport_LoadDynamicModuleWithSpec(PyObject *spec, FILE *fp)
def->m_base.m_init = p0;
/* 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 */
- else
- Py_INCREF(path);
+ }
PyObject *modules = PyImport_GetModuleDict();
if (_PyImport_FixupExtensionObject(m, name_unicode, path, modules) < 0)