From 32349ef7a5bb7efa8ce84ba75026d318fba093b8 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 20 Dec 2020 21:04:02 +0100 Subject: libtracker-data: Plug leak The "ns" variable was being leaked in some circumstances, ensure it's freed properly on all paths. --- src/libtracker-data/tracker-data-manager.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 4a2bee58d..23291722d 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -5097,18 +5097,19 @@ tracker_data_manager_expand_prefix (TrackerDataManager *manager, expanded_ns = tracker_namespace_get_uri (namespaces[i]); if (prefix_map) - g_hash_table_insert (prefix_map, ns, g_strdup (expanded_ns)); + g_hash_table_insert (prefix_map, g_strdup (ns), g_strdup (expanded_ns)); break; } } + g_free (ns); + if (!expanded_ns) { if (prefix) *prefix = NULL; if (expanded) *expanded = g_strdup (term); - g_free (ns); return FALSE; } -- cgit v1.2.1 From 473ef244731b80b787d00e21963c79f82d061de4 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 20 Dec 2020 21:05:00 +0100 Subject: libtracker-data: Plug leak The tracker_data_manager_expand_prefix() function will transfer allocated memory back despite the return value. Just use that on all paths. --- src/libtracker-data/tracker-data-update.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 2f461f4dc..06f3a441a 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -1625,13 +1625,12 @@ bytes_from_gvalue (GValue *gvalue, } *bytes = g_bytes_new (bnode, strlen (bnode) + 1); - } else if (tracker_data_manager_expand_prefix (data->manager, - g_value_get_string (gvalue), - NULL, NULL, - &expanded)) { - *bytes = g_bytes_new_take (expanded, strlen (expanded) + 1); } else { - *bytes = g_bytes_new (uri, strlen (uri) + 1); + tracker_data_manager_expand_prefix (data->manager, + g_value_get_string (gvalue), + NULL, NULL, + &expanded); + *bytes = g_bytes_new_take (expanded, strlen (expanded) + 1); } } else if (G_VALUE_HOLDS_STRING (gvalue)) { const gchar *ptr; -- cgit v1.2.1 From 4f9e9b7e0095a9758bc228bc17921e2eaac35067 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 20 Dec 2020 21:05:51 +0100 Subject: libtracker-data: Plug leak We were missing to free some things when iterating over TrackerResource properties for insertion. --- src/libtracker-data/tracker-data-update.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 06f3a441a..ef1ea0510 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -3005,11 +3005,8 @@ update_resource_single (TrackerData *data, subject, "rdf:type", visited, bnodes, &inner_error); - - if (inner_error) { - g_propagate_error (error, inner_error); - return FALSE; - } + if (inner_error) + goto out; } if (!is_bnode) { @@ -3057,9 +3054,10 @@ update_resource_single (TrackerData *data, break; } +out: g_list_free (properties); + g_free (graph_uri); -out: if (inner_error) { g_propagate_error (error, inner_error); return FALSE; -- cgit v1.2.1 From ef3cfb329d7cbf9b66375fc699b9841cbb9ad4a4 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 20 Dec 2020 21:07:42 +0100 Subject: libtracker-sparql: Plug leak The error should be freed here, the function above does not take ownership. --- src/libtracker-sparql/tracker-endpoint-dbus.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libtracker-sparql/tracker-endpoint-dbus.c b/src/libtracker-sparql/tracker-endpoint-dbus.c index 2418aa03a..b8bf3c604 100644 --- a/src/libtracker-sparql/tracker-endpoint-dbus.c +++ b/src/libtracker-sparql/tracker-endpoint-dbus.c @@ -446,6 +446,7 @@ update_cb (GObject *object, res, &error); if (error) { g_dbus_method_invocation_return_gerror (request->invocation, error); + g_error_free (error); } else { g_dbus_method_invocation_return_value (request->invocation, NULL); } -- cgit v1.2.1 From 733f3aec5aaecd0ee8b4d7b7bd575e5811322f30 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 20 Dec 2020 21:07:54 +0100 Subject: libtracker-sparql: Plug hashtable key leak These keys are supposedly memory owned by the hashtable, so don't disown it. --- src/libtracker-sparql/direct/tracker-direct-batch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtracker-sparql/direct/tracker-direct-batch.c b/src/libtracker-sparql/direct/tracker-direct-batch.c index 718a1cdc6..748836456 100644 --- a/src/libtracker-sparql/direct/tracker-direct-batch.c +++ b/src/libtracker-sparql/direct/tracker-direct-batch.c @@ -198,7 +198,7 @@ tracker_direct_batch_update (TrackerDirectBatch *batch, priv = tracker_direct_batch_get_instance_private (batch); data = tracker_data_manager_get_data (data_manager); - bnodes = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free); + bnodes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); tracker_data_begin_transaction (data, &inner_error); if (inner_error) -- cgit v1.2.1