gnucash stable: [import-commodity-matcher.c] plug GList leaks
Christopher Lam
clam at code.gnucash.org
Sat Apr 22 22:38:40 EDT 2023
Updated via https://github.com/Gnucash/gnucash/commit/919bfa71 (commit)
from https://github.com/Gnucash/gnucash/commit/2b4f0b3b (commit)
commit 919bfa717833e8a5775d5214af09908a157f81b1
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Sun Apr 23 02:11:39 2023 +0800
[import-commodity-matcher.c] plug GList leaks
commodity_list and namespace_list were NULL by the time they were
freed.
diff --git a/gnucash/import-export/import-commodity-matcher.c b/gnucash/import-export/import-commodity-matcher.c
index d34904ef46..12b6b1d7c5 100644
--- a/gnucash/import-export/import-commodity-matcher.c
+++ b/gnucash/import-export/import-commodity-matcher.c
@@ -57,54 +57,33 @@ gnc_commodity * gnc_import_select_commodity(const char * cusip,
{
const gnc_commodity_table * commodity_table = gnc_get_current_commodities ();
gnc_commodity * retval = NULL;
- gnc_commodity * tmp_commodity = NULL;
- char * tmp_namespace = NULL;
- GList * commodity_list = NULL;
- GList * namespace_list = NULL;
- DEBUG("Default fullname received: %s",
- default_fullname ? default_fullname : "(null)");
- DEBUG("Default mnemonic received: %s",
- default_mnemonic ? default_mnemonic : "(null)");
+ DEBUG("Default fullname received: %s", default_fullname);
+ DEBUG("Default mnemonic received: %s", default_mnemonic);
g_return_val_if_fail(cusip, NULL);
DEBUG("Looking for commodity with exchange_code: %s", cusip);
g_assert(commodity_table);
- namespace_list = gnc_commodity_table_get_namespaces(commodity_table);
+ GList *namespace_list = gnc_commodity_table_get_namespaces(commodity_table);
-
- namespace_list = g_list_first(namespace_list);
- while ( namespace_list != NULL && retval == NULL)
+ for (GList *n = namespace_list; !retval && n; n = g_list_next (n))
{
- tmp_namespace = namespace_list->data;
- DEBUG("Looking at namespace %s", tmp_namespace);
- commodity_list = gnc_commodity_table_get_commodities(commodity_table,
- tmp_namespace);
- commodity_list = g_list_first(commodity_list);
- while ( commodity_list != NULL && retval == NULL)
+ const char *ns = n->data;
+ DEBUG("Looking at namespace %s", ns);
+ GList *comm_list = gnc_commodity_table_get_commodities (commodity_table, ns);
+ for (GList *m = comm_list; !retval && m; m = g_list_next (m))
{
- const char* tmp_cusip = NULL;
- tmp_commodity = commodity_list->data;
- DEBUG("Looking at commodity %s",
- gnc_commodity_get_fullname(tmp_commodity));
- tmp_cusip = gnc_commodity_get_cusip(tmp_commodity);
- if (tmp_cusip != NULL && cusip != NULL)
+ gnc_commodity *com = comm_list->data;
+ DEBUG("Looking at commodity %s", gnc_commodity_get_fullname (com));
+ if (!g_strcmp0 (gnc_commodity_get_cusip (com), cusip))
{
- int len = strlen(cusip) > strlen(tmp_cusip) ? strlen(cusip) :
- strlen(tmp_cusip);
- if (strncmp(tmp_cusip, cusip, len) == 0)
- {
- retval = tmp_commodity;
- DEBUG("Commodity %s%s",
- gnc_commodity_get_fullname(retval), " matches.");
- }
+ retval = com;
+ DEBUG("Commodity %s matches.", gnc_commodity_get_fullname (com));
}
- commodity_list = g_list_next(commodity_list);
}
- namespace_list = g_list_next(namespace_list);
+ g_list_free (comm_list);
}
- g_list_free(commodity_list);
g_list_free(namespace_list);
if (retval == NULL && ask_on_unknown != 0)
Summary of changes:
gnucash/import-export/import-commodity-matcher.c | 49 +++++++-----------------
1 file changed, 14 insertions(+), 35 deletions(-)
More information about the gnucash-changes
mailing list