summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2023-02-24 00:54:59 +0100
committerCarlos Garnacho <carlosg@gnome.org>2023-02-24 02:16:46 +0100
commitc874630e0275cf7328e983c3aab5a3aa3451cbb2 (patch)
treebd7af4a0e2137c25ef4b48b7f3b951dfed1cfdd9 /src
parent5ab9ce6c9e83d6998ac8ea5e9ee7a9557b9aacd7 (diff)
downloadtracker-c874630e0275cf7328e983c3aab5a3aa3451cbb2.tar.gz
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.
Diffstat (limited to 'src')
-rw-r--r--src/libtracker-sparql/bus/tracker-bus-statement.c10
-rw-r--r--src/libtracker-sparql/bus/tracker-bus.c8
2 files changed, 10 insertions, 8 deletions
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);