gnucash stable: [dialog-account.c] plug gdk_rgba_to_string leak

Christopher Lam clam at code.gnucash.org
Sat Nov 22 08:31:14 EST 2025


Updated	 via  https://github.com/Gnucash/gnucash/commit/0a3fa2a7 (commit)
	from  https://github.com/Gnucash/gnucash/commit/85e92229 (commit)



commit 0a3fa2a70ed167e6d058c6b6bbf2c947edf3de59
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sat Nov 22 21:28:28 2025 +0800

    [dialog-account.c] plug gdk_rgba_to_string leak

diff --git a/gnucash/gnome-utils/dialog-account.c b/gnucash/gnome-utils/dialog-account.c
index bb7e0746b2..e92122e04d 100644
--- a/gnucash/gnome-utils/dialog-account.c
+++ b/gnucash/gnome-utils/dialog-account.c
@@ -505,20 +505,18 @@ gnc_ui_to_account (AccountWindow *aw)
         xaccAccountSetDescription (account, string);
 
     gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(aw->color_entry_button), &color);
-    string = gdk_rgba_to_string (&color);
-
-    if (g_strcmp0 (string, DEFAULT_COLOR) == 0)
-        string = NULL;
+    char* new_string = gdk_rgba_to_string (&color);
 
     old_string = xaccAccountGetColor (account);
 
-    if (!string && old_string)
+    if (!g_strcmp0 (new_string, DEFAULT_COLOR) && old_string)
         xaccAccountSetColor (account, ""); // remove entry
     else
     {
-        if (g_strcmp0 (string, old_string) != 0)
-            xaccAccountSetColor (account, string); // update entry
+        if (g_strcmp0 (new_string, old_string) != 0)
+            xaccAccountSetColor (account, new_string); // update entry
     }
+    g_free (new_string);
 
     commodity = (gnc_commodity *)
                 gnc_general_select_get_selected (GNC_GENERAL_SELECT(aw->commodity_edit));
@@ -548,7 +546,8 @@ gnc_ui_to_account (AccountWindow *aw)
 
     gtk_text_buffer_get_start_iter (aw->notes_text_buffer, &start);
     gtk_text_buffer_get_end_iter (aw->notes_text_buffer, &end);
-    char *new_string = gtk_text_buffer_get_text (aw->notes_text_buffer, &start, &end, FALSE);
+    new_string = gtk_text_buffer_get_text (aw->notes_text_buffer, &start, &end,
+                                           FALSE);
     old_string = xaccAccountGetNotes (account);
     if (g_strcmp0 (new_string, old_string))
         xaccAccountSetNotes (account, new_string);
@@ -2520,7 +2519,7 @@ gnc_account_cascade_properties_dialog (GtkWidget *window, Account *account)
     {
         GList *accounts = gnc_account_get_descendants (account);
         GdkRGBA new_color;
-        const gchar *new_color_string = NULL;
+        gchar *new_color_string = NULL;
         gboolean color_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(enable_color));
         gboolean placeholder_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(enable_placeholder));
         gboolean hidden_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(enable_hidden));
@@ -2535,7 +2534,10 @@ gnc_account_cascade_properties_dialog (GtkWidget *window, Account *account)
             new_color_string = gdk_rgba_to_string (&new_color);
 
             if (g_strcmp0 (new_color_string, DEFAULT_COLOR) == 0)
+            {
+                g_free (new_color_string);
                 new_color_string = NULL;
+            }
 
             // check/update selected account
             update_account_color (account, old_color_string, new_color_string, replace);
@@ -2569,6 +2571,7 @@ gnc_account_cascade_properties_dialog (GtkWidget *window, Account *account)
             }
         }
         g_list_free (accounts);
+        g_free (new_color_string);
     }
     if (old_color_string)
         g_free (old_color_string);



Summary of changes:
 gnucash/gnome-utils/dialog-account.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)



More information about the gnucash-changes mailing list