From: Shamil Date: Thu, 19 Feb 2026 20:42:55 +0000 (+0300) Subject: gh-144986: Fix memory leak in atexit.register() (#144987) X-Git-Tag: v3.15.0a7~214 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=50c14719fbd47f500dd1a468998201d22475126d;p=thirdparty%2FPython%2Fcpython.git gh-144986: Fix memory leak in atexit.register() (#144987) --- 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 1c901d9124d9..3ddbbd59a1ef 100644 --- a/Modules/atexitmodule.c +++ b/Modules/atexitmodule.c @@ -185,6 +185,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) @@ -192,6 +195,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;