shell-util: Fix a memory leak of a floating variant on error

If `params` is floating when provided by the caller, and if one of the
early return paths is taken from this function, the call into GIO never
sinks and takes ownership of the `GVariant`, and hence it’s leaked.

Always explicitly sink the input variant as soon as the function is
called, then it can’t be leaked.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3396>
This commit is contained in:
Philip Withnall 2024-06-28 17:06:31 +01:00
parent 9a1b0a635f
commit 976c99c5e3

View File

@ -619,6 +619,7 @@ shell_util_systemd_call (const char *command,
gpointer user_data)
{
g_autoptr (GTask) task = g_task_new (NULL, cancellable, callback, user_data);
g_autoptr (GVariant) params_owned = g_variant_ref_sink (g_steal_pointer (&params));
#ifdef HAVE_SYSTEMD
g_autoptr (GDBusConnection) connection = NULL;
@ -695,7 +696,7 @@ shell_util_systemd_call (const char *command,
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
command,
params,
params_owned,
G_VARIANT_TYPE ("(o)"),
G_DBUS_CALL_FLAGS_NONE,
-1, cancellable,