From 06f5d57fd98342393bb2f788cb922728f10e7c2f Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 10:34:34 +0100 Subject: libtracker-common: Fix coverity warning The language_code variable check suggests that the variable may be NULL, but that's not the case here. CID: #1501139 --- src/libtracker-common/tracker-language.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtracker-common/tracker-language.c b/src/libtracker-common/tracker-language.c index dc51e0576..42bac1176 100644 --- a/src/libtracker-common/tracker-language.c +++ b/src/libtracker-common/tracker-language.c @@ -298,7 +298,7 @@ language_set_stopword_list (TrackerLanguage *language, language_add_stopwords (language, stopword_filename); g_free (stopword_filename); - if (!language_code || strcmp (language_code, "en") != 0) { + if (g_strcmp0 (language_code, "en") != 0) { stopword_filename = language_get_stopword_filename ("en"); language_add_stopwords (language, stopword_filename); g_free (stopword_filename); -- cgit v1.2.1 From ee6127fd235218a9fdad2d6123c15809ca4d56fc Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 10:37:30 +0100 Subject: portal: Fix double error free This variable is already g_autoptr, no need to free it in the error paths. CID: #1501111 --- src/portal/tracker-main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/portal/tracker-main.c b/src/portal/tracker-main.c index 8c0429c76..182d3e509 100644 --- a/src/portal/tracker-main.c +++ b/src/portal/tracker-main.c @@ -107,7 +107,6 @@ main (int argc, char *argv[]) if (!g_option_context_parse (context, &argc, (char***) &argv, &error)) { g_printerr ("%s, %s\n", _("Unrecognized options"), error->message); - g_error_free (error); return EXIT_FAILURE; } -- cgit v1.2.1 From aa3caa512bd99bac485d110b4a06cc3d9dbecf83 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 10:58:49 +0100 Subject: portal: Fix GStrv declaration We don't make it look like we are declaring an array, so the compiler thinks the { NULL } is actually the declaration of the GStrv itself. We do want a pointer to an empty GStrv instead, so make it clear that this is a string array. CID: #1501141 --- src/portal/tracker-portal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/portal/tracker-portal.c b/src/portal/tracker-portal.c index 4faeaae0b..3b041603f 100644 --- a/src/portal/tracker-portal.c +++ b/src/portal/tracker-portal.c @@ -229,7 +229,7 @@ load_client_configuration (TrackerPortal *portal, } if (!flatpak_info) { - GStrv default_graphs = { NULL }; + gchar *default_graphs[] = { NULL }; if (inner_error) { g_warning ("Error reading .flatpak-info."); -- cgit v1.2.1 From 2d0c0cb01876f35297741846182a2048b76df516 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 11:18:25 +0100 Subject: libtracker-data: Add paranoia check in condition According to Coverity, there's weird paths that may cause an ontology change on a new class that may still result on us trying to update the range of a related property. It remains to be seen whether the combination of circumstances that lead to this can ever happen together, but it's simple enought to add the paranoia check as those variables where we are composing the ALTER TABLE would be actually empty. CID: #1501144 --- src/libtracker-data/tracker-data-manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 67f97e687..8094da2ae 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -2951,7 +2951,7 @@ create_decomposed_metadata_tables (TrackerDataManager *manager, put_change = TRUE; } - if (in_change && put_change) { + if (in_change && put_change && in_col_sql && sel_col_sql) { range_change_for (property, in_col_sql, sel_col_sql, field_name); } } -- cgit v1.2.1 From 7ab71bcb694d80a54b1d08774b6b2e81ab3bed05 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 11:27:16 +0100 Subject: libtracker-data: Use the right free function on variable This variable is allocated using g_new0(), so should be freed using g_free(). CIDs: #1501119, #1501133 --- src/libtracker-data/tracker-db-interface-sqlite.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index 0be15c283..921fa07b1 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -1399,7 +1399,7 @@ function_sparql_normalize (sqlite3_context *context, char zBuf[128]; sqlite3_snprintf (128, zBuf, "ICU error: unorm_normalize: %s", u_errorName (status)); zBuf[127] = '\0'; - sqlite3_free (zOutput); + g_free (zOutput); result_context_function_error (context, fn, zBuf); return; } @@ -1439,7 +1439,7 @@ function_sparql_unaccent (sqlite3_context *context, char zBuf[128]; sqlite3_snprintf (128, zBuf, "ICU error: unorm_normalize: %s", u_errorName (status)); zBuf[127] = '\0'; - sqlite3_free (zOutput); + g_free (zOutput); result_context_function_error (context, fn, zBuf); return; } -- cgit v1.2.1 From 954ca422d3d6c5150349d8350a08aaff1678c084 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 11:30:45 +0100 Subject: libtracker-data: Free variable using the right free function This variable is allocated with sqlite3_malloc, should be freed with sqlite3_free(). CID: #1501147 --- src/libtracker-data/tracker-vtab-triples.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libtracker-data/tracker-vtab-triples.c b/src/libtracker-data/tracker-vtab-triples.c index a81709cd0..081566ae0 100644 --- a/src/libtracker-data/tracker-vtab-triples.c +++ b/src/libtracker-data/tracker-vtab-triples.c @@ -192,7 +192,7 @@ triples_best_index (sqlite3_vtab *vtab, continue; if (info->aConstraint[i].iColumn == COL_ROWID) { - g_free (idx_str); + sqlite3_free (idx_str); return SQLITE_ERROR; } @@ -201,7 +201,7 @@ triples_best_index (sqlite3_vtab *vtab, info->aConstraint[i].op != SQLITE_INDEX_CONSTRAINT_NE && info->aConstraint[i].op != SQLITE_INDEX_CONSTRAINT_ISNULL && info->aConstraint[i].op != SQLITE_INDEX_CONSTRAINT_ISNOTNULL) { - g_free (idx_str); + sqlite3_free (idx_str); return SQLITE_ERROR; } -- cgit v1.2.1 From 11ad71ae0674d912ed8468dbb3487afb2c529393 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 12:47:48 +0100 Subject: tests: Plug leaks CIDs: #1501103, #1501109, #1501116 --- tests/libtracker-data/tracker-service-test.c | 4 +++- tests/libtracker-sparql/tracker-fd-test.c | 5 ++++- tests/libtracker-sparql/tracker-statement-test.c | 4 +++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/libtracker-data/tracker-service-test.c b/tests/libtracker-data/tracker-service-test.c index 5fd33e3f9..b0fb49615 100644 --- a/tests/libtracker-data/tracker-service-test.c +++ b/tests/libtracker-data/tracker-service-test.c @@ -184,6 +184,7 @@ test_sparql_query (TestInfo *test_info, gchar *results_filename; gchar *prefix, *test_prefix; GFile *ontology; + GThread *thread; /* initialization */ prefix = g_build_filename (TOP_SRCDIR, "tests", "libtracker-data", NULL); @@ -198,7 +199,7 @@ test_sparql_query (TestInfo *test_info, remote = tracker_sparql_connection_new (0, NULL, ontology, NULL, &error); g_assert_no_error (error); - g_thread_new (NULL, thread_func, remote); + thread = g_thread_new (NULL, thread_func, remote); while (!endpoint) { g_usleep (100); } @@ -230,6 +231,7 @@ test_sparql_query (TestInfo *test_info, g_clear_object (&local); g_clear_object (&remote); g_clear_object (&endpoint); + g_thread_unref (thread); } static void diff --git a/tests/libtracker-sparql/tracker-fd-test.c b/tests/libtracker-sparql/tracker-fd-test.c index d65e1651a..7b49990ea 100644 --- a/tests/libtracker-sparql/tracker-fd-test.c +++ b/tests/libtracker-sparql/tracker-fd-test.c @@ -751,18 +751,21 @@ create_dbus_connection (GError **error) { TrackerSparqlConnection *dbus; GDBusConnection *dbus_conn; + GThread *thread; dbus_conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); if (!dbus_conn) return NULL; - g_thread_new (NULL, thread_func, dbus_conn); + thread = g_thread_new (NULL, thread_func, dbus_conn); while (!started) g_usleep (100); dbus = tracker_sparql_connection_bus_new (g_dbus_connection_get_unique_name (dbus_conn), NULL, dbus_conn, error); + g_thread_unref (thread); + return dbus; } diff --git a/tests/libtracker-sparql/tracker-statement-test.c b/tests/libtracker-sparql/tracker-statement-test.c index b6337ea86..a66bb1281 100644 --- a/tests/libtracker-sparql/tracker-statement-test.c +++ b/tests/libtracker-sparql/tracker-statement-test.c @@ -244,6 +244,7 @@ create_connections (TrackerSparqlConnection **dbus, GError **error) { StartupData data; + GThread *thread; data.direct = create_local_connection (NULL); if (!data.direct) @@ -252,7 +253,7 @@ create_connections (TrackerSparqlConnection **dbus, if (!data.dbus_conn) return FALSE; - g_thread_new (NULL, thread_func, &data); + thread = g_thread_new (NULL, thread_func, &data); while (!started) g_usleep (100); @@ -261,6 +262,7 @@ create_connections (TrackerSparqlConnection **dbus, *dbus = tracker_sparql_connection_bus_new (bus_name, NULL, data.dbus_conn, error); *direct = create_local_connection (error); + g_thread_unref (thread); return TRUE; } -- cgit v1.2.1 From ca94f1d758d99792eb2fcc46b80d16b7b1361b20 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 12:53:12 +0100 Subject: libtracker-sparql: Minor code refactor The error->domain checks are mutually exclusive, so do this in if/else branches instead of separate ifs. This does not change functionality, just made to help readability and coverity. CID: #1501115 --- src/libtracker-sparql/tracker-error.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/libtracker-sparql/tracker-error.c b/src/libtracker-sparql/tracker-error.c index 849aa87db..78e08bd90 100644 --- a/src/libtracker-sparql/tracker-error.c +++ b/src/libtracker-sparql/tracker-error.c @@ -75,9 +75,7 @@ _translate_internal_error (GError *error) TRACKER_SPARQL_ERROR_INTERNAL, error->message); } - } - - if (error->domain == TRACKER_DB_INTERFACE_ERROR) { + } else if (error->domain == TRACKER_DB_INTERFACE_ERROR) { TrackerSparqlError new_code = TRACKER_SPARQL_ERROR_INTERNAL; switch (error->code) { -- cgit v1.2.1 From 2e5ccd86f70c2c88819c4ea87bd7a8e09fb22fda Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:01:21 +0100 Subject: tracker: Plug leak in "tracker help" subcommand CID: #1501118 --- src/tracker/tracker-help.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/tracker/tracker-help.c b/src/tracker/tracker-help.c index efefb63e7..072d4f5a0 100644 --- a/src/tracker/tracker-help.c +++ b/src/tracker/tracker-help.c @@ -89,7 +89,8 @@ cmd_to_page (const char *cmd) int tracker_help_show_man_page (const char *cmd) { - const char *page = cmd_to_page (cmd); + char *page = cmd_to_page (cmd); + int retval; setup_man_path (); @@ -97,6 +98,9 @@ tracker_help_show_man_page (const char *cmd) exec_man_cmd ("man", page); } - return exec_man_man ("man", page); + retval = exec_man_man ("man", page); + g_free (page); + + return retval; } -- cgit v1.2.1 From 3294c0c3df5d92779ee61ab89247377ab2794d96 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:09:11 +0100 Subject: libtracker-data: Plug leak The "expr" variable was being leaked in some error paths. CID: #1501122 --- src/libtracker-data/tracker-data-manager.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 8094da2ae..a3ba840a4 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -406,10 +406,8 @@ set_index_for_multi_value_property (TrackerDBInterface *iface, service_name, field_name); - if (internal_error) { - g_propagate_error (error, internal_error); - return; - } + if (internal_error) + goto out; TRACKER_NOTE (ONTOLOGY_CHANGES, g_message ("Creating index (multi-value property): " @@ -425,10 +423,8 @@ set_index_for_multi_value_property (TrackerDBInterface *iface, field_name, expr); - if (internal_error) { - g_propagate_error (error, internal_error); - return; - } + if (internal_error) + goto out; } else { TRACKER_NOTE (ONTOLOGY_CHANGES, g_message ("Creating index (multi-value property): " @@ -444,9 +440,13 @@ set_index_for_multi_value_property (TrackerDBInterface *iface, field_name, expr); - if (internal_error) { - g_propagate_error (error, internal_error); - } + if (internal_error) + goto out; + } + +out: + if (internal_error) { + g_propagate_error (error, internal_error); } g_free (expr); -- cgit v1.2.1 From c78a0f75460ac432584650f0ef4bda6a2ba8f148 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:13:43 +0100 Subject: libtracker-data: Plug leak The "query" variable was being leaked on some error paths. CID: #1501124 --- src/libtracker-data/tracker-data-manager.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index a3ba840a4..77cdf1ff9 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -3020,13 +3020,12 @@ create_decomposed_metadata_tables (TrackerDataManager *manager, TRACKER_NOTE (ONTOLOGY_CHANGES, g_message ("Copy: %s", query)); tracker_db_interface_execute_query (iface, &internal_error, "%s", query); + g_free (query); if (internal_error) { g_propagate_error (error, internal_error); goto error_out; } - - g_free (query); for (i = 0; i < n_props; i++) { property = properties[i]; -- cgit v1.2.1 From 4b20a14e1c5556adb236395ad57446556f74c9b1 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:17:43 +0100 Subject: libtracker-sparql: Plug leak The "request" variable was being leaked in some error paths. CID: #1501132 --- 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 b8bf3c604..fb3d8b7bc 100644 --- a/src/libtracker-sparql/tracker-endpoint-dbus.c +++ b/src/libtracker-sparql/tracker-endpoint-dbus.c @@ -635,6 +635,7 @@ endpoint_dbus_iface_method_call (GDBusConnection *connection, /* Statements are single use here... */ g_object_unref (stmt); } else { + query_request_free (request); g_dbus_method_invocation_return_gerror (invocation, error); } -- cgit v1.2.1 From 19ce81876f832561e47b3eff3ca0e45ec6a170fc Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:20:04 +0100 Subject: libtracker-data: Plug leak On error paths, the GString was being leaked. Ensure we set it up after early returns. CID: #1501135 --- src/libtracker-data/tracker-data-manager.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 77cdf1ff9..2be94685d 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -4448,13 +4448,13 @@ data_manager_perform_cleanup (TrackerDataManager *manager, const gchar *graph; GString *str; - str = g_string_new ("WITH referencedElements(ID) AS (" - "SELECT ID FROM \"main\".Refcount "); - graphs = tracker_data_manager_ensure_graphs (manager, iface, &internal_error); if (!graphs) goto fail; + str = g_string_new ("WITH referencedElements(ID) AS (" + "SELECT ID FROM \"main\".Refcount "); + g_hash_table_iter_init (&iter, graphs); while (g_hash_table_iter_next (&iter, (gpointer*) &graph, NULL)) { -- cgit v1.2.1 From 45b44b9658db0762d851de9adf852e53f320fb19 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:23:18 +0100 Subject: libtracker-sparql: Plug leak on API misuse If we use the g_return_val_if_fail(), the string builder is leaked. CID: #1501138 --- src/libtracker-sparql/tracker-namespace-manager.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libtracker-sparql/tracker-namespace-manager.c b/src/libtracker-sparql/tracker-namespace-manager.c index e9b2456fd..6a4ebc315 100644 --- a/src/libtracker-sparql/tracker-namespace-manager.c +++ b/src/libtracker-sparql/tracker-namespace-manager.c @@ -300,7 +300,7 @@ char * tracker_namespace_manager_print_turtle (TrackerNamespaceManager *self) { TrackerNamespaceManagerPrivate *priv; - GString *result = g_string_new (""); + GString *result; GHashTableIter iter; const char *prefix; const char *namespace; @@ -309,6 +309,8 @@ tracker_namespace_manager_print_turtle (TrackerNamespaceManager *self) priv = GET_PRIVATE (self); + result = g_string_new (""); + g_hash_table_iter_init (&iter, priv->prefix_to_namespace); while (g_hash_table_iter_next (&iter, (gpointer *)&prefix, (gpointer *)&namespace)) { g_string_append_printf (result, "@prefix %s: <%s> .\n", prefix, namespace); -- cgit v1.2.1 From 143f1bb1d26d8bf75463a162d22a1034bb42ba8d Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:24:53 +0100 Subject: libtracker-data: Plug leak CID: #1501145 --- src/libtracker-data/tracker-db-interface-sqlite.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index 921fa07b1..367585192 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -3819,8 +3819,9 @@ tracker_db_interface_detach_database (TrackerDBInterface *db_interface, gchar *sql; sql = g_strdup_printf ("DETACH DATABASE \"%s\"", name); - stmt = tracker_db_interface_prepare_stmt (db_interface, sql, error); + g_free (sql); + if (!stmt) return FALSE; -- cgit v1.2.1 From 6653d1659d173ec6384cecf7b0089d35abe82926 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:28:26 +0100 Subject: portal: "Plug" leak Coverity complains here, even though there's no paths that inner_error is set but not used. Mark it as autoptr, so it's more consistent and makes Coverity shut up here. CID: #1501149 --- src/portal/tracker-portal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/portal/tracker-portal.c b/src/portal/tracker-portal.c index 3b041603f..1fdb48087 100644 --- a/src/portal/tracker-portal.c +++ b/src/portal/tracker-portal.c @@ -213,7 +213,7 @@ load_client_configuration (TrackerPortal *portal, GError **error) { g_autoptr (GKeyFile) flatpak_info = NULL; - GError *inner_error = NULL; + g_autoptr(GError) inner_error = NULL; GStrv graphs; if (portal->test_flatpak_info) { -- cgit v1.2.1 From dc380b2f759bc447bb1175fe41797e4c24724756 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:37:45 +0100 Subject: libtracker-data: Explicitly check for return value Not really crucial, but as it's done in the other 315 cases... CID: #1501140 --- src/libtracker-data/tracker-sparql.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 28c73bf6c..7d066f980 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -9455,13 +9455,17 @@ tracker_sparql_new (TrackerDataManager *manager, &sparql->parser_error); if (tree) { TrackerSparqlState state = { 0 }; + GError *internal_error = NULL; sparql->tree = tree; sparql->current_state = &state; sparql->current_state->node = tracker_node_tree_get_root (sparql->tree); tracker_sparql_init_string_builder (sparql); - _call_rule_func (sparql, NAMED_RULE_Query, &sparql->parser_error); + + if (!_call_rule_func (sparql, NAMED_RULE_Query, &internal_error)) + g_propagate_error (&sparql->parser_error, internal_error); + sparql->current_state = NULL; tracker_sparql_state_clear (&state); -- cgit v1.2.1 From 7b85fb9361181c2eb45e1d056afca359c1b4338e Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 20 Mar 2021 13:47:03 +0100 Subject: libtracker-data: Reorder unref call The add_literal_binding() above keeps a ref to it, so it's not really used after free, but should help both Coverity and the casual reader. CID: #1501108 --- src/libtracker-data/tracker-sparql.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c index 7d066f980..fd9ca99dc 100644 --- a/src/libtracker-data/tracker-sparql.c +++ b/src/libtracker-data/tracker-sparql.c @@ -1627,7 +1627,6 @@ _add_quad (TrackerSparql *sparql, tracker_binding_set_db_column_name (binding, "fts5"); tracker_select_context_add_literal_binding (TRACKER_SELECT_CONTEXT (sparql->context), TRACKER_LITERAL_BINDING (binding)); - g_object_unref (binding); fts_table = tracker_sparql_add_fts_subquery (sparql, graph, subject, TRACKER_LITERAL_BINDING (binding)); @@ -1635,6 +1634,7 @@ _add_quad (TrackerSparql *sparql, db_table = fts_table; share_table = FALSE; is_fts = TRUE; + g_object_unref (binding); } else if (property != NULL) { db_table = tracker_property_get_table_name (property); -- cgit v1.2.1 From 4dfe849cafa3a1bcb4336913f210ca193cdaa1c5 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 26 Mar 2021 12:21:05 +0100 Subject: libtracker-fts: Plug leak In some error paths, the fts GString is not freed. CID: #1502942 --- src/libtracker-fts/tracker-fts.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libtracker-fts/tracker-fts.c b/src/libtracker-fts/tracker-fts.c index 55211fb81..f3805e4d0 100644 --- a/src/libtracker-fts/tracker-fts.c +++ b/src/libtracker-fts/tracker-fts.c @@ -163,7 +163,6 @@ tracker_fts_create_table (sqlite3 *db, g_string_append (fts, "tokenize=TrackerTokenizer)"); rc = sqlite3_exec(db, fts->str, NULL, NULL, NULL); - g_string_free (fts, TRUE); if (rc != SQLITE_OK) goto error; @@ -176,6 +175,8 @@ tracker_fts_create_table (sqlite3 *db, g_string_free (str, TRUE); error: + g_string_free (fts, TRUE); + if (rc != SQLITE_OK) { g_set_error (error, TRACKER_DB_INTERFACE_ERROR, -- cgit v1.2.1