From: Carlos Garcia Campos Date: Thu, 19 Apr 2007 14:53:19 +0000 (+0000) Subject: Check whether uri is valid before launching it. Fixes bug #427664. X-Git-Tag: EVINCE_0_9_0~43 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=13380e3af645c5597e22cc8e35d23acf3c7b4695;p=evince.git Check whether uri is valid before launching it. Fixes bug #427664. 2007-04-19 Carlos Garcia Campos * shell/ev-window.c: (uri_is_valid), (launch_external_uri): Check whether uri is valid before launching it. Fixes bug #427664. svn path=/trunk/; revision=2409 --- diff --git a/ChangeLog b/ChangeLog index d27afefa..9198d0dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-04-19 Carlos Garcia Campos + + * shell/ev-window.c: (uri_is_valid), (launch_external_uri): + + Check whether uri is valid before launching it. Fixes bug #427664. + 2007-04-19 Carlos Garcia Campos * shell/ev-window.c: diff --git a/shell/ev-window.c b/shell/ev-window.c index 7863c28c..4d76b6f2 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -4516,10 +4516,45 @@ launch_action (EvWindow *window, EvLinkAction *action) allowing to launch executables is a good idea though. -- marco */ } +static gboolean +uri_is_valid (const gchar *uri) +{ + gchar *p = (gchar *) uri; + + if (!p || !g_ascii_isalpha (*p)) + return FALSE; + + p++; + while (g_ascii_isalnum (*p)) + p++; + + return (g_ascii_strncasecmp (p, "://", strlen ("://")) == 0); +} + static void launch_external_uri (EvWindow *window, EvLinkAction *action) { - gnome_vfs_url_show (ev_link_action_get_uri (action)); + const gchar *uri = ev_link_action_get_uri (action); + + if (!uri_is_valid (uri)) { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (GTK_WINDOW (window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("Unable to open external link")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("Invalid URI: “%s”"), uri); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_widget_destroy), + NULL); + gtk_widget_show (dialog); + + return; + } + + gnome_vfs_url_show (uri); } static void