gnucash master: Fix crash in case filter is less than 4 parameters

Geert Janssens gjanssens at code.gnucash.org
Mon May 18 05:46:20 EDT 2020


Updated	 via  https://github.com/Gnucash/gnucash/commit/9df81fa7 (commit)
	from  https://github.com/Gnucash/gnucash/commit/3e44af3c (commit)



commit 9df81fa7abea542c76faa6d2772226bc018b875f
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Wed May 13 15:27:00 2020 +0200

    Fix crash in case filter is less than 4 parameters
    
    This apparently is not an issue on maint, but on master it results in a crash.

diff --git a/gnucash/gnome/gnc-plugin-page-register.c b/gnucash/gnome/gnc-plugin-page-register.c
index 5229de385..dd3736508 100644
--- a/gnucash/gnome/gnc-plugin-page-register.c
+++ b/gnucash/gnome/gnc-plugin-page-register.c
@@ -1348,7 +1348,6 @@ gnc_plugin_page_register_create_widget (GncPluginPage* plugin_page)
     GtkWidget* gsr;
     SplitRegister* reg;
     Account* acct;
-    gchar** filter;
     gchar* order;
     int filter_changed = 0;
     gboolean create_new_page = FALSE;
@@ -1402,6 +1401,8 @@ gnc_plugin_page_register_create_widget (GncPluginPage* plugin_page)
     ledger_type = gnc_ledger_display_type (priv->ledger);
 
     {
+        gchar** filter;
+        guint filtersize = 0;
         /* Set the sort order for the split register and status of save order button */
         priv->sd.save_order = FALSE;
         order = gnc_plugin_page_register_get_sort_order (plugin_page);
@@ -1429,15 +1430,16 @@ gnc_plugin_page_register_create_widget (GncPluginPage* plugin_page)
 
         filter = g_strsplit (gnc_plugin_page_register_get_filter (plugin_page), ",",
                              -1);
+        filtersize = g_strv_length (filter);
 
         PINFO ("Loaded Filter Status is %s", filter[0]);
 
         priv->fd.cleared_match = (gint)g_ascii_strtoll (filter[0], NULL, 16);
 
-        if (filter[0] && (g_strcmp0 (filter[0], DEFAULT_FILTER) != 0))
+        if (filtersize > 0 && (g_strcmp0 (filter[0], DEFAULT_FILTER) != 0))
             filter_changed = filter_changed + 1;
 
-        if (filter[1] && (g_strcmp0 (filter[1], "0") != 0))
+        if (filtersize > 1 && (g_strcmp0 (filter[1], "0") != 0))
         {
             PINFO ("Loaded Filter Start Date is %s", filter[1]);
 
@@ -1446,7 +1448,7 @@ gnc_plugin_page_register_create_widget (GncPluginPage* plugin_page)
             filter_changed = filter_changed + 1;
         }
 
-        if (filter[2] && (g_strcmp0 (filter[2], "0") != 0))
+        if (filtersize > 2 && (g_strcmp0 (filter[2], "0") != 0))
         {
             PINFO ("Loaded Filter End Date is %s", filter[2]);
 
@@ -1459,7 +1461,7 @@ gnc_plugin_page_register_create_widget (GncPluginPage* plugin_page)
         priv->fd.days = (gint)g_ascii_strtoll (
                             get_filter_default_num_of_days (ledger_type), NULL, 10);
 
-        if (filter[3] &&
+        if (filtersize > 3 &&
             (g_strcmp0 (filter[3], get_filter_default_num_of_days (ledger_type)) != 0))
         {
             PINFO ("Loaded Filter Days is %s", filter[3]);



Summary of changes:
 gnucash/gnome/gnc-plugin-page-register.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)



More information about the gnucash-changes mailing list