gnucash stable: Multiple changes pushed

Robert Fewell bobit at code.gnucash.org
Tue Apr 11 07:31:22 EDT 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/cc2aa21d (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7101fc45 (commit)
	from  https://github.com/Gnucash/gnucash/commit/e8786520 (commit)



commit cc2aa21d310ddc3996dbf618233cccf8720fc65c
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Tue Apr 11 12:25:37 2023 +0100

    Bug 798821 - Crash when running report in window
    
    Caused by a use after free when storing a reference to the
    GncMainWindow in a hash table. There is no need to do that so changed.

diff --git a/gnucash/gnome-utils/gnc-plugin-menu-additions.c b/gnucash/gnome-utils/gnc-plugin-menu-additions.c
index f7b091f532..5f206ef9e1 100644
--- a/gnucash/gnome-utils/gnc-plugin-menu-additions.c
+++ b/gnucash/gnome-utils/gnc-plugin-menu-additions.c
@@ -81,7 +81,6 @@ typedef struct _GncPluginMenuAdditionsPerWindow
     /** The menu/toolbar action information associated with a specific
         window.  This plugin must maintain its own data because of the
         way the menus are currently built. */
-    GncMainWindow  *window;
     GHashTable     *item_hash;
     GHashTable     *build_menu_hash;
     GMenu          *report_menu;
@@ -187,27 +186,30 @@ gnc_plugin_menu_additions_action_new_cb (GSimpleAction *simple,
                                          GVariant      *parameter,
                                          gpointer       user_data)
 {
-    GncMainWindowActionData *data = user_data;
+    GncMainWindowActionData *cb_data = user_data;
+    GncPlugin *plugin = cb_data->data;
     GncPluginMenuAdditionsPrivate *priv;
-    GncMainWindowActionData *cb_data;
+
+    SCM extension;
     gsize length;
     const gchar *action_name;
 
     g_return_if_fail (G_IS_SIMPLE_ACTION(simple));
 
     ENTER("");
-    priv = GNC_PLUGIN_MENU_ADDITIONS_GET_PRIVATE(data->data);
+
+    priv = GNC_PLUGIN_MENU_ADDITIONS_GET_PRIVATE(plugin);
 
     action_name = g_variant_get_string (parameter, &length);
 
     PINFO("action name is '%s'", action_name);
 
-    cb_data = g_hash_table_lookup (priv->item_hash, action_name);
+    extension = g_hash_table_lookup (priv->item_hash, action_name);
 
-    if (cb_data)
+    if (extension)
     {
         PINFO("Found action in table");
-        gnc_extension_invoke_cb (cb_data->data, gnc_main_window_to_scm (cb_data->window));
+        gnc_extension_invoke_cb (extension, gnc_main_window_to_scm (cb_data->window));
     }
     LEAVE("");
 }
@@ -390,7 +392,7 @@ gnc_menu_additions_assign_accel (ExtensionInfo *info, GHashTable *table)
 }
 
 static GMenuItem *
-setup_tooltip_for_gmenu_item (ExtensionInfo *ext_info)
+setup_gmenu_item_with_tooltip (ExtensionInfo *ext_info)
 {
     GMenuItem *gmenu_item = NULL;
 
@@ -426,7 +428,6 @@ static void
 gnc_menu_additions_menu_setup_one (ExtensionInfo *ext_info,
                                    GncPluginMenuAdditionsPerWindow *per_window)
 {
-    GncMainWindowActionData *cb_data;
     GMenuItem *item_path, *item_with_full_path;
     gchar *full_path = NULL;
     GMenuItem *gmenu_item = NULL;
@@ -434,11 +435,7 @@ gnc_menu_additions_menu_setup_one (ExtensionInfo *ext_info,
     DEBUG("Adding %s/%s [%s] as [%s]", ext_info->path, ext_info->action_label,
            ext_info->action_name, ext_info->typeStr );
 
-    cb_data = g_new0 (GncMainWindowActionData, 1);
-    cb_data->window = per_window->window;
-    cb_data->data = ext_info->extension;
-
-    g_hash_table_insert (per_window->item_hash, g_strdup (ext_info->action_name), cb_data);
+    g_hash_table_insert (per_window->item_hash, g_strdup (ext_info->action_name), ext_info->extension);
 
     if (g_str_has_suffix (ext_info->path, _("_Custom")))
         return;
@@ -450,7 +447,7 @@ gnc_menu_additions_menu_setup_one (ExtensionInfo *ext_info,
 
     if (!item_path && !item_with_full_path)
     {
-        gmenu_item = setup_tooltip_for_gmenu_item (ext_info);
+        gmenu_item = setup_gmenu_item_with_tooltip (ext_info);
 
         g_menu_append_item (G_MENU(per_window->report_menu), gmenu_item);
     }
@@ -459,7 +456,7 @@ gnc_menu_additions_menu_setup_one (ExtensionInfo *ext_info,
     {
         GMenuModel *sub_menu = G_MENU_MODEL(g_object_get_data (G_OBJECT(item_path), "sub-menu"));
 
-        gmenu_item = setup_tooltip_for_gmenu_item (ext_info);
+        gmenu_item = setup_gmenu_item_with_tooltip (ext_info);
 
         g_menu_append_item (G_MENU(sub_menu), gmenu_item);
     }
@@ -496,9 +493,10 @@ gnc_plugin_menu_additions_add_to_window (GncPlugin *plugin,
 
     ENTER(" ");
 
-    per_window.window = window;
-    per_window.item_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+    if (!priv->item_hash)
+        priv->item_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
 
+    per_window.item_hash = priv->item_hash;
     per_window.build_menu_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
     per_window.report_menu = g_menu_new ();
 
@@ -511,12 +509,10 @@ gnc_plugin_menu_additions_add_to_window (GncPlugin *plugin,
                     (GFunc)gnc_menu_additions_do_preassigned_accel, table);
     g_slist_foreach (menu_list, (GFunc)gnc_menu_additions_assign_accel, table);
 
-    /* Add to window. */
+    /* Create the menu. */
     g_slist_foreach (menu_list, (GFunc)gnc_menu_additions_menu_setup_one,
                      &per_window);
 
-    priv->item_hash = per_window.item_hash;
-
     // add the report menu to the window
     gsm->search_action_label = NULL;
     gsm->search_action_name = "ReportsPlaceholder0";

commit 7101fc458bea6992432d9cc3bada9e19564b4761
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Tue Apr 11 12:08:22 2023 +0100

    Bug 798834 - CSS-based Stylesheet Help Button not working
    
    Callback for help button was misssing.

diff --git a/gnucash/gnome/dialog-report-style-sheet.cpp b/gnucash/gnome/dialog-report-style-sheet.cpp
index f3ac6383fc..a0d8f97d75 100644
--- a/gnucash/gnome/dialog-report-style-sheet.cpp
+++ b/gnucash/gnome/dialog-report-style-sheet.cpp
@@ -186,6 +186,7 @@ gnc_style_sheet_dialog_create (StyleSheetDialog * ss,
 
     ssinfo->odialog->set_apply_cb(gnc_style_sheet_options_apply_cb, ssinfo);
     ssinfo->odialog->set_close_cb(gnc_style_sheet_options_close_cb, ssinfo);
+    ssinfo->odialog->set_style_sheet_help_cb();
     auto window = ssinfo->odialog->get_widget();
     gtk_window_set_transient_for (GTK_WINDOW(window),
                                   GTK_WINDOW(gnc_style_sheet_dialog->toplevel));



Summary of changes:
 gnucash/gnome-utils/gnc-plugin-menu-additions.c | 38 +++++++++++--------------
 gnucash/gnome/dialog-report-style-sheet.cpp     |  1 +
 2 files changed, 18 insertions(+), 21 deletions(-)



More information about the gnucash-changes mailing list