From 5a812ca1eb9d13896ed1fc43ea207414b8a041ce Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sat, 4 Dec 2021 01:36:08 +0800 Subject: [PATCH] [options.scm] gnc:make-budget-option stores guid instead of object because object may become stale if UI is used to delete it, leading to stale pointer and segfault. storing guid is safer, and will return null if budget is deleted. --- libgnucash/app-utils/options.scm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libgnucash/app-utils/options.scm b/libgnucash/app-utils/options.scm index 8481572cbb..dbc4e0b5cb 100644 --- a/libgnucash/app-utils/options.scm +++ b/libgnucash/app-utils/options.scm @@ -470,6 +470,13 @@ the option '~a'.")) (selection-budget initial-budget) ) + + (define (convert-to-guid item) + (if (string? item) item (gncBudgetGetGUID item))) + + (define (convert-to-budget item) + (if (string? item) (gnc-budget-lookup item (gnc-get-current-book)) item)) + (gnc:make-option section name @@ -478,12 +485,12 @@ the option '~a'.")) documentation-string ;; getter -- Return a budget pointer - (lambda () - selection-budget) + (lambda () + (convert-to-budget selection-budget)) ;; setter -- takes a budget (lambda (x) - (set! selection-budget x)) + (set! selection-budget (convert-to-guid x))) ;; default-getter ;; Default now is #f so saving is independent of book-level default