gnucash stable: [gnc-pricedb.cpp] plug leak when fiscal_end_date is null

Christopher Lam clam at code.gnucash.org
Wed Nov 26 18:34:57 EST 2025


Updated	 via  https://github.com/Gnucash/gnucash/commit/7c7c8b09 (commit)
	from  https://github.com/Gnucash/gnucash/commit/04af7b5f (commit)



commit 7c7c8b09923218c1feb9514e8e65e11027b9acd9
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Wed Nov 26 10:42:07 2025 +0800

    [gnc-pricedb.cpp] plug leak when fiscal_end_date is null
    
    fiscal_end_date was assigned g_date_new but never freed. merge with
    invalid fiscal_end_date too.

diff --git a/libgnucash/engine/gnc-pricedb.cpp b/libgnucash/engine/gnc-pricedb.cpp
index 83c317b63b..66946358cb 100644
--- a/libgnucash/engine/gnc-pricedb.cpp
+++ b/libgnucash/engine/gnc-pricedb.cpp
@@ -29,6 +29,7 @@
 #include <stdint.h>
 #include <stdlib.h>
 #include "gnc-date.h"
+#include "gnc-datetime.hpp"
 #include "gnc-pricedb-p.h"
 #include <qofinstance-p.h>
 
@@ -1590,23 +1591,15 @@ gnc_pricedb_remove_old_prices (GNCPriceDB *db, GList *comm_list,
           g_slist_length (data.list), datebuff);
 
     // Check for a valid fiscal end of year date
-    if (fiscal_end_date == nullptr)
+    if (fiscal_end_date == nullptr || !g_date_valid (fiscal_end_date))
     {
-        GDate today;
-        gnc_gdate_set_today (&today);
-        GDateYear year_now = g_date_get_year (&today);
-        fiscal_end_date = g_date_new ();
-        g_date_set_dmy (fiscal_end_date, 31, GDateMonth(12), year_now);
+        auto ymd = GncDate().year_month_day();
+        GDate end_this_year;
+        g_date_set_dmy (&end_this_year, 31, GDateMonth(12), ymd.year);
+        gnc_pricedb_process_removal_list (db, &end_this_year, data, keep);
     }
-    else if (g_date_valid (fiscal_end_date) == FALSE)
-    {
-        GDate today;
-        gnc_gdate_set_today (&today);
-        GDateYear year_now = g_date_get_year (&today);
-        g_date_clear (fiscal_end_date, 1);
-        g_date_set_dmy (fiscal_end_date, 31, GDateMonth(12), year_now);
-    }
-    gnc_pricedb_process_removal_list (db, fiscal_end_date, data, keep);
+    else
+        gnc_pricedb_process_removal_list (db, fiscal_end_date, data, keep);
 
     g_slist_free (data.list);
     LEAVE(" ");



Summary of changes:
 libgnucash/engine/gnc-pricedb.cpp | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)



More information about the gnucash-changes mailing list