SNet Router Crash fix



   Hi!

BEAST has been crashing for me in the last git version, should be reproducable
by the following steps:

(1) start beast
(2) load BQS organ instrument
(3) in the snet router, RIGHT click on DavOrgan-1
-> crash

In any case, I tried to fix it myself, and this is the resulting patch:

diff --git a/beast-gtk/bstmenus.cc b/beast-gtk/bstmenus.cc
index a26bda0..1fdb0b5 100644
--- a/beast-gtk/bstmenus.cc
+++ b/beast-gtk/bstmenus.cc
@@ -10,7 +10,7 @@ struct BstChoice {
   Bse::Icon      bseicon;
   String         name;
   void          *p_id;
-  BstChoice() : type_and_flags (BST_CHOICE_TYPE_SEPARATOR), icon_stock_id (NULL), name (NULL), p_id (NULL) {}
+  BstChoice() : type_and_flags (BST_CHOICE_TYPE_SEPARATOR), p_id (NULL) {}
 };
 
 
@@ -136,7 +136,7 @@ bst_choice_menu_add_choice_and_free (GtkWidget *menu,
                                       gxk_stock_image (choice->icon_stock_id.c_str(), GXK_ICON_SIZE_MENU));
       any = gtk_widget_new (GTK_TYPE_ACCEL_LABEL,
                            "visible", TRUE,
-                           "label", choice->name,
+                           "label", choice->name.c_str(),
                            "parent", item,
                            "accel_widget", item,
                            "xalign", 0.0,
@@ -230,7 +230,7 @@ bst_choice_dialog_createv (BstChoice *first_choice,
          any = gtk_widget_new (GTK_TYPE_LABEL,
                                "visible", TRUE,
                                "justify", GTK_JUSTIFY_CENTER,
-                               "label", choice->name,
+                               "label", choice->name.c_str(),
                                "wrap", FALSE,
                                NULL);
          gtk_box_pack_start (GTK_BOX (vbox), any, TRUE, TRUE, 0);
@@ -269,7 +269,7 @@ bst_choice_dialog_createv (BstChoice *first_choice,
        {
          GtkWidget *any;
        case BST_CHOICE_TYPE_TITLE:
-         gtk_widget_set (dialog, "title", choice->name, NULL);
+         gtk_widget_set (dialog, "title", choice->name.c_str(), NULL);
          break;
        case BST_CHOICE_TYPE_ITEM:
          any = gxk_dialog_action_multi (GXK_DIALOG (dialog), choice->name.c_str(),
diff --git a/beast-gtk/bstmenus.hh b/beast-gtk/bstmenus.hh
index 591eee9..705b059 100644
--- a/beast-gtk/bstmenus.hh
+++ b/beast-gtk/bstmenus.hh
@@ -48,7 +48,7 @@ void     bst_choice_destroy             (GtkWidget              *choice);
 #define BST_CHOICE_TEXT(name)            (bst_choice_alloc (BST_CHOICE_TYPE_TEXT, \
                                                            (name), NULL, BST_STOCK_NONE, Bse::Icon()))
 #define BST_CHOICE_SEPERATOR             (bst_choice_alloc (BST_CHOICE_TYPE_SEPARATOR, \
-                                                           NULL, NULL, BST_STOCK_NONE, Bse::Icon()))
+                                                           "", NULL, BST_STOCK_NONE, Bse::Icon()))
 #define BST_CHOICE_END                   (NULL)
 
 
diff --git a/beast-gtk/bstutils.hh b/beast-gtk/bstutils.hh
index 08cbb96..adc4bcb 100644
--- a/beast-gtk/bstutils.hh
+++ b/beast-gtk/bstutils.hh
@@ -183,7 +183,7 @@ BstGMask*       bst_gmask_quick         (GtkWidget     *gmask_container,
 
 
 /* --- stock actions and aliases --- */
-#define BST_STOCK_NONE                  (NULL)
+#define BST_STOCK_NONE                  ("")
 #define BST_STOCK_APPLY                 GTK_STOCK_APPLY
 #define BST_STOCK_CANCEL                GTK_STOCK_CANCEL
 #define BST_STOCK_CDROM                 GTK_STOCK_CDROM

Why this is needed:

All changes I made directly avoid constructing a std::string with NULL as
argument.  In some cases, I had to change NULL to "" to make it work. Even in
case that you cannot reproduce the crash, the changes should still be logically
necessary. (The varargs changes are not from me).

   Cu... Stefan
-- 
Stefan Westerfeld, http://space.twc.de/~stefan


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]