gnucash maint: Avoid passing invalid arguments to functions to get rid of some non-fatal asserts.

Mike Alexander mta at code.gnucash.org
Mon Aug 10 03:15:01 EDT 2015


Updated	 via  https://github.com/Gnucash/gnucash/commit/054e6f7a (commit)
	from  https://github.com/Gnucash/gnucash/commit/05fdefa3 (commit)



commit 054e6f7a2284d58c66eb08fbd76694248e78b70e
Author: Mike Alexander <mta at umich.edu>
Date:   Thu Aug 6 17:43:57 2015 -0400

    Avoid passing invalid arguments to functions to get rid of some non-fatal asserts.

diff --git a/src/app-utils/gnc-sx-instance-model.c b/src/app-utils/gnc-sx-instance-model.c
index 2b3975d..560fe79 100644
--- a/src/app-utils/gnc-sx-instance-model.c
+++ b/src/app-utils/gnc-sx-instance-model.c
@@ -730,7 +730,8 @@ _find_unreferenced_vars(gchar *key,
                         gpointer value,
                         HashListPair *cb_pair)
 {
-    if (!g_hash_table_lookup_extended(cb_pair->hash, key, NULL, NULL))
+    if (cb_pair->hash ==  NULL ||
+        !g_hash_table_lookup_extended(cb_pair->hash, key, NULL, NULL))
     {
         g_debug("variable [%s] not found", key);
         cb_pair->list = g_list_append(cb_pair->list, key);
@@ -804,20 +805,27 @@ gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXactio
 
     // handle variables
     {
-        HashListPair removed_cb_data, added_cb_data;
         GList *removed_var_names = NULL, *added_var_names = NULL;
         GList *inst_iter = NULL;
 
-        removed_cb_data.hash = new_instances->variable_names;
-        removed_cb_data.list = NULL;
-        g_hash_table_foreach(existing->variable_names, (GHFunc)_find_unreferenced_vars, &removed_cb_data);
-        removed_var_names = removed_cb_data.list;
+        if (existing->variable_names != NULL)
+        {
+            HashListPair removed_cb_data;
+            removed_cb_data.hash = new_instances->variable_names;
+            removed_cb_data.list = NULL;
+            g_hash_table_foreach(existing->variable_names, (GHFunc)_find_unreferenced_vars, &removed_cb_data);
+            removed_var_names = removed_cb_data.list;
+        }
         g_debug("%d removed variables", g_list_length(removed_var_names));
 
-        added_cb_data.hash = existing->variable_names;
-        added_cb_data.list = NULL;
-        g_hash_table_foreach(new_instances->variable_names, (GHFunc)_find_unreferenced_vars, &added_cb_data);
-        added_var_names = added_cb_data.list;
+        if (new_instances->variable_names != NULL)
+        {
+            HashListPair added_cb_data;
+            added_cb_data.hash = existing->variable_names;
+            added_cb_data.list = NULL;
+            g_hash_table_foreach(new_instances->variable_names, (GHFunc)_find_unreferenced_vars, &added_cb_data);
+            added_var_names = added_cb_data.list;
+        }
         g_debug("%d added variables", g_list_length(added_var_names));
 
         if (existing->variable_names != NULL)
diff --git a/src/engine/SchedXaction.c b/src/engine/SchedXaction.c
index 62bf445..d4d8232 100644
--- a/src/engine/SchedXaction.c
+++ b/src/engine/SchedXaction.c
@@ -633,7 +633,8 @@ xaccSchedXactionSetEndDate( SchedXaction *sx, const GDate *newEnd )
  * the SX is to run "forever". See gnc_sxed_save_sx() and
  * schedXact_editor_populate() in dialog-sx-editor.c.
  */
-    if (newEnd == NULL || g_date_compare( newEnd, &sx->start_date ) < 0 )
+    if (newEnd == NULL ||
+        (g_date_valid(newEnd) && g_date_compare( newEnd, &sx->start_date ) < 0 ))
     {
         /* XXX: I reject the bad data - is this the right
          * thing to do <rgmerk>.



Summary of changes:
 src/app-utils/gnc-sx-instance-model.c | 28 ++++++++++++++++++----------
 src/engine/SchedXaction.c             |  3 ++-
 2 files changed, 20 insertions(+), 11 deletions(-)



More information about the gnucash-changes mailing list