]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-145376: Fix various reference leaks (GH-145377)
authorJelle Zijlstra <jelle.zijlstra@gmail.com>
Tue, 3 Mar 2026 15:23:30 +0000 (07:23 -0800)
committerGitHub <noreply@github.com>
Tue, 3 Mar 2026 15:23:30 +0000 (16:23 +0100)
Misc/NEWS.d/next/Core_and_Builtins/2026-02-28-16-46-17.gh-issue-145376.lG5u1a.rst [new file with mode: 0644]
Modules/main.c
Python/crossinterp.c
Python/import.c
Python/pythonrun.c
Python/sysmodule.c

diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-02-28-16-46-17.gh-issue-145376.lG5u1a.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-02-28-16-46-17.gh-issue-145376.lG5u1a.rst
new file mode 100644 (file)
index 0000000..a5a6908
--- /dev/null
@@ -0,0 +1 @@
+Fix reference leaks in various unusual error scenarios.
index 74e48c9473256579fcef59c7d7de5992b388de0f..95ba541d98c2e84175975930ab332aa88b93df8f 100644 (file)
@@ -506,6 +506,7 @@ pymain_run_interactive_hook(int *exitcode)
     }
 
     if (PySys_Audit("cpython.run_interactivehook", "O", hook) < 0) {
+        Py_DECREF(hook);
         goto error;
     }
 
index 6365b995a0d3f725ae1c70ceafe80f83cc85ebb8..c8a80e7a9860083155b0ea5709a246ef85b5e1b2 100644 (file)
@@ -609,6 +609,7 @@ check_missing___main___attr(PyObject *exc)
     // Get the error message.
     PyObject *args = PyException_GetArgs(exc);
     if (args == NULL || args == Py_None || PyObject_Size(args) < 1) {
+        Py_XDECREF(args);
         assert(!PyErr_Occurred());
         return 0;
     }
index dfc4d5707bfdba1fdc4b111a5eba837e0dfdc425..3ed808f67f41497920259a150c3da3476108331c 100644 (file)
@@ -5642,6 +5642,7 @@ _imp__set_lazy_attributes_impl(PyObject *module, PyObject *modobj,
 
     module_dict = get_mod_dict(modobj);
     if (module_dict == NULL || !PyDict_CheckExact(module_dict)) {
+        Py_DECREF(lazy_submodules);
         goto done;
     }
 
index ec8c2d12ab27fcb5fb2a5dfbeb834dac0e2ad05d..043bdf3433ab573dade62892deb11b5adc8dfa10 100644 (file)
@@ -1145,6 +1145,7 @@ _PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
         "traceback",
         "_print_exception_bltin");
     if (print_exception_fn == NULL || !PyCallable_Check(print_exception_fn)) {
+        Py_XDECREF(print_exception_fn);
         goto fallback;
     }
 
index 28b2108940c85303c600b0b8f71d20740bb2c8e4..55b4072213d3c2ec62e45b55d28fffddb92dadc9 100644 (file)
@@ -1762,7 +1762,7 @@ sys_getwindowsversion_impl(PyObject *module)
     PyObject *realVersion = _sys_getwindowsversion_from_kernel32();
     if (!realVersion) {
         if (!PyErr_ExceptionMatches(PyExc_WindowsError)) {
-            return NULL;
+            goto error;
         }
 
         PyErr_Clear();