gnucash maint: Fix crash when there's no TRANS_READ_ONLY_REASON slot.

John Ralls jralls at code.gnucash.org
Sun Sep 9 18:10:36 EDT 2018


Updated	 via  https://github.com/Gnucash/gnucash/commit/a19dcc7b (commit)
	from  https://github.com/Gnucash/gnucash/commit/b2d99615 (commit)



commit a19dcc7bd4b4c2a64f905968b8db523fee44c31d
Author: John Ralls <jralls at ceridwen.us>
Date:   Sun Sep 9 15:02:53 2018 -0700

    Fix crash when there's no TRANS_READ_ONLY_REASON slot.
    
    Unsetting an empty g_value raises a fatal error, causing tests to fail
    in some environments.
    
    g_free() handles NULLs itself, no need to protect it.

diff --git a/libgnucash/engine/Transaction.c b/libgnucash/engine/Transaction.c
index 7d7ce25..1ddf183 100644
--- a/libgnucash/engine/Transaction.c
+++ b/libgnucash/engine/Transaction.c
@@ -813,8 +813,7 @@ xaccFreeTransaction (Transaction *trans)
     /* free up transaction strings */
     CACHE_REMOVE(trans->num);
     CACHE_REMOVE(trans->description);
-    if (trans->readonly_reason)
-        g_free (trans->readonly_reason);
+    g_free (trans->readonly_reason);
 
     /* Just in case someone looks up freed memory ... */
     trans->num         = (char *) 1;
@@ -2076,8 +2075,7 @@ void xaccTransClearReadOnly (Transaction *trans)
         qof_instance_set_dirty(QOF_INSTANCE(trans));
         xaccTransCommitEdit(trans);
 
-        if (trans->readonly_reason)
-            g_free (trans->readonly_reason);
+        g_free (trans->readonly_reason);
         trans->readonly_reason = NULL;
         trans->reason_cache_valid = TRUE;
     }
@@ -2096,8 +2094,7 @@ xaccTransSetReadOnly (Transaction *trans, const char *reason)
         qof_instance_set_dirty(QOF_INSTANCE(trans));
         xaccTransCommitEdit(trans);
 
-        if (trans->readonly_reason)
-            g_free (trans->readonly_reason);
+        g_free (trans->readonly_reason);
         trans->readonly_reason = g_strdup (reason);
         trans->reason_cache_valid = TRUE;
     }
@@ -2467,15 +2464,16 @@ xaccTransGetReadOnly (Transaction *trans)
         qof_instance_get_kvp (QOF_INSTANCE(trans), &v, 1, TRANS_READ_ONLY_REASON);
 
         /* Clear possible old cache value first */
-        if (trans->readonly_reason)
-            g_free (trans->readonly_reason);
+        g_free (trans->readonly_reason);
         trans->readonly_reason = NULL;
 
         /* Then set the new one */
         if (G_VALUE_HOLDS_STRING (&v))
+        {
             trans->readonly_reason = g_value_dup_string (&v);
-        g_value_unset (&v);
-        trans->reason_cache_valid = TRUE;
+            g_value_unset (&v);
+            trans->reason_cache_valid = TRUE;
+        }
     }
     return trans->readonly_reason;
 }



Summary of changes:
 libgnucash/engine/Transaction.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)



More information about the gnucash-changes mailing list