From 9d15e70ce2f06be0b3eafa8b836d1abb3a43fa03 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sat, 16 Dec 2023 12:02:21 -0800 Subject: [PATCH] Bug 799148 - Reliable crash when saving a modified saved report... configuration. The user's saved configurations included some based on a bad report-id, so handle the hash table returning #f by skipping that configuration. There's an odd side-effect: The Save Configuration As action doesn't prepare the dialog to edit the saved configuration name, the user must find the new configuration and rename it. It works correctly if there are no discarded configurations. --- gnucash/report/report-core.scm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gnucash/report/report-core.scm b/gnucash/report/report-core.scm index 8d7868dab61..167491d95e5 100644 --- a/gnucash/report/report-core.scm +++ b/gnucash/report/report-core.scm @@ -645,11 +645,14 @@ not found."))) (define (gnc:report-template-serialize report-template) (let* ((name (gnc:report-template-name report-template)) (type (gnc:report-template-parent-type report-template)) - (templ-name (gnc:report-template-name - (hash-ref *gnc:_report-templates_* type))) - (options (gnc:report-template-new-options report-template)) - (guid (gnc:report-template-report-guid report-template))) - (gnc:report-template-serialize-internal name type templ-name options guid))) + (tmpl (hash-ref *gnc:_report-templates_* type))) + (cond + ((not tmpl) (gnc:warn "gnc:report-template-serialize: cannot find template for " type) #f) + (else + (let ((templ-name (gnc:report-template-name tmpl)) + (options (gnc:report-template-new-options report-template)) + (guid (gnc:report-template-report-guid report-template))) + (gnc:report-template-serialize-internal name type templ-name options guid)))))) ;; Convert a report into a report template and save this template in the savefile ;; Under specific conditions the we will attempt to replace the current report's @@ -712,7 +715,7 @@ not found."))) (define (gnc:report-template-save-to-savefile report-template) (let ((saved-form (gnc:report-template-serialize report-template))) - (gnc-saved-reports-write-to-file saved-form #f))) + (and saved-form (gnc-saved-reports-write-to-file saved-form #f)))) ;; save all custom reports, moving the old version of the ;; saved-reports file aside as a backup