From c874630e0275cf7328e983c3aab5a3aa3451cbb2 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 24 Feb 2023 00:54:59 +0100 Subject: bus: Plug GVariant leaks There were a couple of GVariant leaks, in the handling of DBus replies and TrackerSparqlStatement parameter handling. Shuffle the variant floating reference ownership of parameters so it's "owned" by the hash table, and not picked by the first GVariantBuilder. --- src/libtracker-sparql/bus/tracker-bus-statement.c | 10 +++++----- src/libtracker-sparql/bus/tracker-bus.c | 8 +++++--- 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'src/libtracker-sparql') diff --git a/src/libtracker-sparql/bus/tracker-bus-statement.c b/src/libtracker-sparql/bus/tracker-bus-statement.c index d24af164e..e5c6e9ef9 100644 --- a/src/libtracker-sparql/bus/tracker-bus-statement.c +++ b/src/libtracker-sparql/bus/tracker-bus-statement.c @@ -60,7 +60,7 @@ tracker_bus_statement_bind_string (TrackerSparqlStatement *stmt, g_hash_table_insert (bus_stmt->arguments, g_strdup (name), - g_variant_new_string (value)); + g_variant_ref_sink (g_variant_new_string (value))); } static void @@ -72,7 +72,7 @@ tracker_bus_statement_bind_boolean (TrackerSparqlStatement *stmt, g_hash_table_insert (bus_stmt->arguments, g_strdup (name), - g_variant_new_boolean (value)); + g_variant_ref_sink (g_variant_new_boolean (value))); } static void @@ -84,7 +84,7 @@ tracker_bus_statement_bind_double (TrackerSparqlStatement *stmt, g_hash_table_insert (bus_stmt->arguments, g_strdup (name), - g_variant_new_double (value)); + g_variant_ref_sink (g_variant_new_double (value))); } static void @@ -96,7 +96,7 @@ tracker_bus_statement_bind_int (TrackerSparqlStatement *stmt, g_hash_table_insert (bus_stmt->arguments, g_strdup (name), - g_variant_new_int64 (value)); + g_variant_ref_sink (g_variant_new_int64 (value))); } static void @@ -110,7 +110,7 @@ tracker_bus_statement_bind_datetime (TrackerSparqlStatement *stmt, date_str = tracker_date_format_iso8601 (value); g_hash_table_insert (bus_stmt->arguments, g_strdup (name), - g_variant_new_string (date_str)); + g_variant_ref_sink (g_variant_new_string (date_str))); g_free (date_str); } diff --git a/src/libtracker-sparql/bus/tracker-bus.c b/src/libtracker-sparql/bus/tracker-bus.c index 117cc34e6..bec72c822 100644 --- a/src/libtracker-sparql/bus/tracker-bus.c +++ b/src/libtracker-sparql/bus/tracker-bus.c @@ -255,7 +255,7 @@ convert_params (GHashTable *parameters) while (g_hash_table_iter_next (&iter, (gpointer*) &name, (gpointer*) &value)) { g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}")); g_variant_builder_add (&builder, "s", name); - g_variant_builder_add (&builder, "v", g_variant_ref (value)); + g_variant_builder_add (&builder, "v", value); g_variant_builder_close (&builder); } @@ -1550,13 +1550,15 @@ query_dbus_call_cb (GObject *source, res, &error); if (reply && !g_dbus_message_to_gerror (reply, &error)) { TrackerSparqlCursor *cursor; - GVariant *body; + GVariant *body, *child; GInputStream *istream; body = g_dbus_message_get_body (reply); istream = g_task_get_task_data (task); - cursor = tracker_bus_cursor_new (istream, g_variant_get_child_value (body, 0)); + child = g_variant_get_child_value (body, 0); + cursor = tracker_bus_cursor_new (istream, child); g_task_return_pointer (task, cursor, g_object_unref); + g_variant_unref (child); } else { g_dbus_error_strip_remote_error (error); g_task_return_error (task, error); -- cgit v1.2.1