Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos 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)
commit13380e3af645c5597e22cc8e35d23acf3c7b4695 (patch)
treec27a573b21723b9620e31d50b9ea667a33ee049e
parentc5495be1b3803a125c48d39d3ee34b86acc0bba0 (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
-rw-r--r--ChangeLog6
-rw-r--r--shell/ev-window.c37
2 files changed, 42 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d27afef..9198d0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
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.
+
+2007-04-19 Carlos Garcia Campos <carlosgc@gnome.org>
+
* shell/ev-window.c:
Change key accelerator for Open a Copy menu entry which is in conflict
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