From 77bac2c2fff38d1525c53fc630f1dff98c7ef067 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Sat, 6 Aug 2016 17:37:32 -0700 Subject: [PATCH] Bug 769576 - Seg Fault on Editing Scheduled Transaction's Amount The problem being that GValue takes gnc-numerics as boxed values so qof_object_set needs a gnc-numeric* and qof_object_get a gnc-numeric**. --- .../ledger-core/split-register-model-save.c | 14 +++++++++++--- src/register/ledger-core/split-register-model.c | 8 ++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/register/ledger-core/split-register-model-save.c b/src/register/ledger-core/split-register-model-save.c index b90b565450..a923c4a2bc 100644 --- a/src/register/ledger-core/split-register-model-save.c +++ b/src/register/ledger-core/split-register-model-save.c @@ -712,7 +712,7 @@ gnc_template_register_save_debcred_cell (BasicCell * cell, /* amountStr = gnc_numeric_to_string (new_amount); */ formula = gnc_table_layout_get_cell_value (reg->table->layout, FCRED_CELL); - /* If the value can be parsed into a numeric result (without any + /* If the value can be parsed into a numeric result (without any * further variable definitions), store that numeric value * additionally in the kvp. Otherwise store a zero numeric * there.*/ @@ -725,11 +725,15 @@ gnc_template_register_save_debcred_cell (BasicCell * cell, amount = gnc_numeric_zero(); } qof_instance_set (QOF_INSTANCE (sd->split), - "sx-credit-numeric", amount, + "sx-credit-formula", formula, + "sx-credit-numeric", &amount, NULL); } else { + qof_instance_set (QOF_INSTANCE (sd->split), + "sx-credit-formula", formula, + NULL); g_hash_table_destroy(parser_vars); parser_vars = g_hash_table_new (g_str_hash, g_str_equal); } @@ -746,11 +750,15 @@ gnc_template_register_save_debcred_cell (BasicCell * cell, amount = gnc_numeric_zero(); } qof_instance_set (QOF_INSTANCE (sd->split), - "sx-debit-numeric", amount, + "sx-debit-formula", formula, + "sx-debit-numeric", &amount, NULL); } else { + qof_instance_set (QOF_INSTANCE (sd->split), + "sx-debit-formula", formula, + NULL); g_hash_table_destroy(parser_vars); parser_vars = NULL; } diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c index 202958e82f..15e3847a2f 100644 --- a/src/register/ledger-core/split-register-model.c +++ b/src/register/ledger-core/split-register-model.c @@ -2177,7 +2177,7 @@ gnc_template_register_get_debcred_entry (VirtualLocation virt_loc, { SplitRegister *reg = user_data; Split *split; - gnc_numeric amount; + gnc_numeric *amount; const char * cell_name; split = gnc_split_register_get_split (reg, virt_loc.vcell_loc); @@ -2196,11 +2196,11 @@ gnc_template_register_get_debcred_entry (VirtualLocation virt_loc, qof_instance_get (QOF_INSTANCE (split), "sx-credit-numeric", &amount, NULL); - if (gnc_numeric_zero_p (amount)) + if (gnc_numeric_zero_p (*amount)) return ""; - amount = gnc_numeric_abs (amount); - return xaccPrintAmount (amount, gnc_default_print_info (FALSE)); + *amount = gnc_numeric_abs (*amount); + return xaccPrintAmount (*amount, gnc_default_print_info (FALSE)); } static void