+2012-10-06 [mones] 3.8.1cvs85
+
+ * po/POTFILES.in
+ Added src/gtk/menu.c
+ * src/common/defs.h
+ * src/gtk/menu.c
+ * src/gtk/menu.h
+ New function cm_menu_item_new_label_from_url to
+ avoid crashing on huge URL strings and warn user
+ about the possible causes
+ * src/mainwindow.c
+ Use it to create List menu items safely
+
2012-10-04 [colin] 3.8.1cvs84
* src/imap.c
( cvs diff -u -r 1.49.2.152 -r 1.49.2.153 src/procmime.c; ) > 3.8.1cvs82.patchset
( cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/advsearch.c; ) > 3.8.1cvs83.patchset
( cvs diff -u -r 1.179.2.266 -r 1.179.2.267 src/imap.c; ) > 3.8.1cvs84.patchset
+( cvs diff -u -r 1.53.2.38 -r 1.53.2.39 po/POTFILES.in; cvs diff -u -r 1.274.2.353 -r 1.274.2.354 src/mainwindow.c; cvs diff -u -r 1.9.2.59 -r 1.9.2.60 src/common/defs.h; cvs diff -u -r 1.5.2.47 -r 1.5.2.48 src/gtk/menu.c; cvs diff -u -r 1.4.2.27 -r 1.4.2.28 src/gtk/menu.h; ) > 3.8.1cvs85.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=84
+EXTRA_VERSION=85
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
src/gtk/icon_legend.c
src/gtk/inputdialog.c
src/gtk/logwindow.c
+src/gtk/menu.c
src/gtk/pluginwindow.c
src/gtk/prefswindow.c
src/gtk/progressdialog.c
#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 BOLD_FONT prefs_common.boldfont
#define NORMAL_FONT prefs_common.normalfont
#include "menu.h"
#include "utils.h"
#include "gtkutils.h"
+#include "defs.h"
#ifdef MAEMO
#ifdef CHINOOK
}
+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),
+ _("<span><b>Warning:</b> 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.</span>"));
+ 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;
void cm_menu_set_sensitive_full(GtkUIManager *gui_manager, 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);
+
#if !GTK_CHECK_VERSION(3, 0, 0)
gint menu_find_option_menu_index(GtkCMOptionMenu *optmenu, gpointer data,
GCompareFunc func);
get_url_part (&url_pt, url_decoded);
item = NULL;
if (!g_ascii_strncasecmp(url_decoded, "mailto:", 7)) {
- item = gtk_menu_item_new_with_label ((url_decoded));
+ item = cm_menu_item_new_label_from_url ((url_decoded));
g_signal_connect(G_OBJECT(item), "activate",
G_CALLBACK(mailing_list_compose),
NULL);
else if (!g_ascii_strncasecmp(url_decoded, "http:", 5) ||
!g_ascii_strncasecmp(url_decoded, "https:",6)) {
- item = gtk_menu_item_new_with_label ((url_decoded));
+ item = cm_menu_item_new_label_from_url ((url_decoded));
g_signal_connect(G_OBJECT(item), "activate",
G_CALLBACK(mailing_list_open_uri),
NULL);