diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2007-04-19 14:53:19 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2007-04-19 14:53:19 (GMT) |
commit | 13380e3af645c5597e22cc8e35d23acf3c7b4695 (patch) | |
tree | c27a573b21723b9620e31d50b9ea667a33ee049e /shell | |
parent | c5495be1b3803a125c48d39d3ee34b86acc0bba0 (diff) |
Check whether uri is valid before launching it. Fixes bug #427664.
2007-04-19 Carlos Garcia Campos <carlosgc@gnome.org>
* 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
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ev-window.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c index 7863c28..4d76b6f 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 |