commit 17a2e58047a50a92b60ba544673b4ecc365a9420 from: Oliver Lowe date: Fri Sep 5 02:54:07 2025 UTC Allocate the known max length for labels from URLs The function didn't actually do anything commit - aecd382fde51be4e9bb3c68de70bf800a38590f0 commit + 17a2e58047a50a92b60ba544673b4ecc365a9420 blob - 8dff25b7b1f26fbacab1d270d3da339313b4c2df blob + a8ac4c300b6585e272616dd2216d13522ceaa0f7 --- src/common/defs.h +++ src/common/defs.h @@ -102,9 +102,6 @@ #define VSPACING_NARROW_2 2 #define VBOX_BORDER 8 #define DEFAULT_ENTRY_WIDTH 80 -/* labels bigger than this causes crash with the X Window System error: - 'BadAlloc (insufficient resources for operation)' */ -#define MAX_MENU_LABEL_LENGTH 5453 #define DEFAULT_PIXMAP_THEME "INTERNAL_DEFAULT" blob - 63db7fa1574c75519d4bf2d526203a364a0e8115 blob + 674c52b26190b88a800244bbc0d2e5ceb58c1f9f --- src/gtk/menu.c +++ src/gtk/menu.c @@ -111,25 +111,6 @@ gchar *cm_menu_item_get_shortcut(GtkUIManager *gui_man } -GtkWidget *cm_menu_item_new_label_from_url(gchar *url) -{ - gint len = strlen(url); - if (len > MAX_MENU_LABEL_LENGTH) { - g_message("Refusing a %d bytes string as menu label\n", len); - url[64] = '\0', url[63] = url[62] = url[61] = '.', url[60] = ' '; - GtkWidget *newlabel = gtk_menu_item_new_with_label(url); - gtk_widget_set_tooltip_markup(GTK_WIDGET(newlabel), - g_strconcat("", _("Warning:"), "", - _("This URL was too long for displaying and\n" - "has been truncated for safety. This message could be\n" - "corrupted, malformed or part of some DoS attempt."), - "", NULL)); - return newlabel; - } - - return gtk_menu_item_new_with_label(url); -} - void cm_toggle_menu_set_active_full(GtkUIManager *gui_manager, gchar *menu, gboolean active) { GtkWidget *widget; blob - 78c7fe44f14f8a7fe2a49cf8ac4fbff41d264f43 blob + bc53322fc1bd53782e6caf8d37dbde258fda5b82 --- src/gtk/menu.h +++ src/gtk/menu.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * */ #ifndef __MENU_H__ @@ -91,7 +91,6 @@ void cm_toggle_menu_set_active(gchar *menu, gboolean a void cm_menu_set_sensitive_full(GtkUIManager *gui_manager, const gchar *menu, gboolean sensitive); void cm_toggle_menu_set_active_full(GtkUIManager *gui_manager, gchar *menu, gboolean active); gchar *cm_menu_item_get_shortcut(GtkUIManager *gui_manager, gchar *menu); -GtkWidget *cm_menu_item_new_label_from_url(gchar *label); void menu_set_sensitive_all(GtkMenuShell *menu_shell, gboolean sensitive); blob - 5f56a0496b38d7a369d2d6f60104d27b9a68b995 blob + 2131f6d77fe733a7c11ecc4cc0c33fc2d008260b --- src/mainwindow.c +++ src/mainwindow.c @@ -75,6 +75,12 @@ #include "socket.h" #include "send_message.h" +/* + * longer labels crash the X Window System with error: + * 'BadAlloc (insufficient resources for operation)' + */ +#define MAX_MENU_LABEL_LENGTH 5453 + /* list of all instantiated MainWindow */ static GList *mainwin_list = NULL; @@ -2571,7 +2577,7 @@ static gint mailing_list_populate_submenu (GtkWidget * { GtkWidget *item, *menu; const gchar *url_pt ; - gchar url_decoded[BUFFSIZE]; + gchar url_decoded[MAX_MENU_LABEL_LENGTH]; GList *children, *amenu; gint menu_nb = 0; @@ -2590,7 +2596,7 @@ static gint mailing_list_populate_submenu (GtkWidget * get_url_part (&url_pt, url_decoded); item = NULL; if (!g_ascii_strncasecmp(url_decoded, "mailto:", 7)) { - item = cm_menu_item_new_label_from_url ((url_decoded)); + item = gtk_menu_item_new_with_label(url_decoded); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(mailing_list_compose), NULL); @@ -2598,7 +2604,7 @@ static gint mailing_list_populate_submenu (GtkWidget * else if (!g_ascii_strncasecmp(url_decoded, "http:", 5) || !g_ascii_strncasecmp(url_decoded, "https:",6)) { - item = cm_menu_item_new_label_from_url ((url_decoded)); + item = gtk_menu_item_new_with_label(url_decoded); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(mailing_list_open_uri), NULL);