]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-149921: Fix reference leaks in _interpchannels and _interpqueues modules...
authorAN Long <aisk@users.noreply.github.com>
Sun, 17 May 2026 13:36:32 +0000 (22:36 +0900)
committerGitHub <noreply@github.com>
Sun, 17 May 2026 13:36:32 +0000 (13:36 +0000)
(cherry picked from commit acefff95eab3db6b7cf837f3ce2707bbf9199376)

Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst [new file with mode: 0644]
Modules/_interpchannelsmodule.c
Modules/_interpqueuesmodule.c

diff --git a/Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst b/Misc/NEWS.d/next/Library/2026-05-16-21-08-33.gh-issue-149921.I1yNML.rst
new file mode 100644 (file)
index 0000000..113bd1a
--- /dev/null
@@ -0,0 +1,2 @@
+Fix reference leaks in error paths of the :mod:`!_interpchannels` and
+:mod:`!_interpqueues` extension modules.
index 460b4e5f4ea4f0ff8d5fda14886e7fbf891d0530..4d5099f380714e271890f5619f8a673c402b084e 100644 (file)
@@ -2553,6 +2553,7 @@ _channelid_from_xid(_PyCrossInterpreterData *data)
 {
     struct _channelid_xid *xid = \
                 (struct _channelid_xid *)_PyCrossInterpreterData_DATA(data);
+    PyObject *cidobj = NULL;
 
     // It might not be imported yet, so we can't use _get_current_module().
     PyObject *mod = PyImport_ImportModule(MODULE_NAME_STR);
@@ -2562,11 +2563,10 @@ _channelid_from_xid(_PyCrossInterpreterData *data)
     assert(mod != Py_None);
     module_state *state = get_module_state(mod);
     if (state == NULL) {
-        return NULL;
+        goto done;
     }
 
     // Note that we do not preserve the "resolve" flag.
-    PyObject *cidobj = NULL;
     int err = newchannelid(state->ChannelIDType, xid->cid, xid->end,
                            _global_channels(), 0, 0,
                            (channelid **)&cidobj);
index d84b53d9021a53f6854c72ba68adad3928c3f0c7..7a89e2f13a1c72a271245972150111dda61d4194 100644 (file)
@@ -1355,6 +1355,7 @@ _queueobj_from_xid(_PyCrossInterpreterData *data)
         // XXX import it?
         PyErr_SetString(PyExc_RuntimeError,
                         MODULE_NAME_STR " module not imported yet");
+        Py_DECREF(qidobj);
         return NULL;
     }