From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 16 Mar 2026 08:26:05 +0000 (+0100) Subject: [3.14] gh-144986: Fix memory leak in atexit.register() (GH-144987) (#145020) X-Git-Tag: v3.14.4~132 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a1f2fefc327b87dba37581377d756fdb14576b91;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-144986: Fix memory leak in atexit.register() (GH-144987) (#145020) gh-144986: Fix memory leak in atexit.register() (GH-144987) (cherry picked from commit 50c14719fbd47f500dd1a468998201d22475126d) Co-authored-by: Shamil --- diff --git a/Misc/NEWS.d/next/Library/2026-02-19-00-00-00.gh-issue-144986.atexit-leak.rst b/Misc/NEWS.d/next/Library/2026-02-19-00-00-00.gh-issue-144986.atexit-leak.rst new file mode 100644 index 000000000000..841c3758ec4d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-02-19-00-00-00.gh-issue-144986.atexit-leak.rst @@ -0,0 +1,2 @@ +Fix a memory leak in :func:`atexit.register`. +Patch by Shamil Abdulaev. diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c index c3aad96bba6e..d2f739cecfbb 100644 --- a/Modules/atexitmodule.c +++ b/Modules/atexitmodule.c @@ -184,6 +184,9 @@ atexit_register(PyObject *module, PyObject *args, PyObject *kwargs) return NULL; } PyObject *func_args = PyTuple_GetSlice(args, 1, PyTuple_GET_SIZE(args)); + if (func_args == NULL) { + return NULL; + } PyObject *func_kwargs = kwargs; if (func_kwargs == NULL) @@ -191,6 +194,7 @@ atexit_register(PyObject *module, PyObject *args, PyObject *kwargs) func_kwargs = Py_None; } PyObject *callback = PyTuple_Pack(3, func, func_args, func_kwargs); + Py_DECREF(func_args); if (callback == NULL) { return NULL;