From 655c04bd68d984272d8593ebbcff10f3dbaac93b Mon Sep 17 00:00:00 2001 From: Mike Alexander Date: Thu, 6 Aug 2015 17:43:57 -0400 Subject: [PATCH] Avoid passing invalid arguments to functions to get rid of some non-fatal asserts. --- src/app-utils/gnc-sx-instance-model.c | 28 ++++++++++++------- src/engine/SchedXaction.c | 3 +- .../ledger-core/split-register-model.c | 18 ++++++++---- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/app-utils/gnc-sx-instance-model.c b/src/app-utils/gnc-sx-instance-model.c index 153554c842..cd7f1a30a1 100644 --- a/src/app-utils/gnc-sx-instance-model.c +++ b/src/app-utils/gnc-sx-instance-model.c @@ -714,7 +714,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); @@ -788,20 +789,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 a1f3723ae2..8c6292c773 100644 --- a/src/engine/SchedXaction.c +++ b/src/engine/SchedXaction.c @@ -638,7 +638,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 . diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c index 82d0f300ea..202958e82f 100644 --- a/src/register/ledger-core/split-register-model.c +++ b/src/register/ledger-core/split-register-model.c @@ -2093,9 +2093,12 @@ gnc_template_register_get_fdebt_entry (VirtualLocation virt_loc, Split *split = gnc_split_register_get_split(reg, virt_loc.vcell_loc); char *formula = NULL; - qof_instance_get (QOF_INSTANCE (split), - "sx-debit-formula", &formula, - NULL); + if (split) + { + qof_instance_get (QOF_INSTANCE (split), + "sx-debit-formula", &formula, + NULL); + } return formula; } @@ -2124,9 +2127,12 @@ gnc_template_register_get_fcred_entry (VirtualLocation virt_loc, Split *split = gnc_split_register_get_split(reg, virt_loc.vcell_loc); char *formula = NULL; - qof_instance_get (QOF_INSTANCE (split), - "sx-credit-formula", &formula, - NULL); + if (split) + { + qof_instance_get (QOF_INSTANCE (split), + "sx-credit-formula", &formula, + NULL); + } return formula;