gnucash master: Bug 769576 - Seg Fault on Editing Scheduled Transaction's Amount

John Ralls jralls at code.gnucash.org
Sat Aug 6 20:41:16 EDT 2016


Updated	 via  https://github.com/Gnucash/gnucash/commit/77bac2c2 (commit)
	from  https://github.com/Gnucash/gnucash/commit/31d13bee (commit)



commit 77bac2c2fff38d1525c53fc630f1dff98c7ef067
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat Aug 6 17:37:32 2016 -0700

    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**.

diff --git a/src/register/ledger-core/split-register-model-save.c b/src/register/ledger-core/split-register-model-save.c
index b90b565..a923c4a 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 202958e..15e3847 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



Summary of changes:
 src/register/ledger-core/split-register-model-save.c | 14 +++++++++++---
 src/register/ledger-core/split-register-model.c      |  8 ++++----
 2 files changed, 15 insertions(+), 7 deletions(-)



More information about the gnucash-changes mailing list