From 3ba43be13812acf9b8d12186d74468cd0e295b79 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sat, 11 May 2019 07:57:07 +0200 Subject: Add a simple way to fix the URL It tries to load it as a file before trying a URL to avoid loading something meant as local. Closes: https://gitlab.com/lanodan/badWolf/issues/6 --- badwolf.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'badwolf.c') diff --git a/badwolf.c b/badwolf.c index 1cdaab6..abc0fef 100644 --- a/badwolf.c +++ b/badwolf.c @@ -8,6 +8,7 @@ #include /* g_fprintf() */ #include #include /* LC_* */ +#include /* realpath() */ #include const gchar *homepage = "https://hacktivis.me/projects/badwolf"; @@ -36,6 +37,7 @@ struct Client GtkWidget *search; }; +gchar *ensure_uri_scheme(gchar *text); static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data); static gboolean commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client *browser); @@ -80,6 +82,33 @@ static void notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data); gint get_tab_position(GtkContainer *notebook, GtkWidget *child); +gchar * +ensure_uri_scheme(gchar *text) +{ + if(text == NULL) return "about:blank"; + + char *scheme = g_uri_parse_scheme(text); + + if(scheme != NULL) + return text; + else + { + gchar *f; + char *path; + path = realpath(text, NULL); + + if(path != NULL) + { + f = g_strdup_printf("file://%s", path); + free(path); + } + else + f = g_strdup_printf("http://%s", text); + + return f; + } +} + static void badwolf_about_dialog(GtkWindow *main_window) { @@ -425,10 +454,10 @@ WebViewCb_create(WebKitWebView *related_web_view, static gboolean locationCb_activate(GtkEntry *location, gpointer user_data) { - const char *target_url; + char *target_url; struct Client *browser = (struct Client *)user_data; - target_url = gtk_entry_get_text(location); + target_url = ensure_uri_scheme((char *)gtk_entry_get_text(location)); if(target_url != NULL) webkit_web_view_load_uri(browser->webView, target_url); @@ -502,7 +531,7 @@ struct Client * new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web_view) { struct Client *browser = g_malloc(sizeof(struct Client)); - if(target_url == NULL) target_url = "about:blank"; + target_url = ensure_uri_scheme(target_url); browser->window = window; browser->box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); -- cgit v1.3.1-23-gd82d From 47be92a843fe469256ec136dd13f5b2ee69c7d27 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sat, 11 May 2019 08:16:38 +0200 Subject: ensure_uri_scheme: Don’t try to resolve as a file on opening a related view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- badwolf.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'badwolf.c') diff --git a/badwolf.c b/badwolf.c index abc0fef..246ad76 100644 --- a/badwolf.c +++ b/badwolf.c @@ -37,7 +37,7 @@ struct Client GtkWidget *search; }; -gchar *ensure_uri_scheme(gchar *text); +gchar *ensure_uri_scheme(gchar *text, gbool try_file); static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data); static gboolean commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client *browser); @@ -83,15 +83,15 @@ notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gint get_tab_position(GtkContainer *notebook, GtkWidget *child); gchar * -ensure_uri_scheme(gchar *text) +ensure_uri_scheme(gchar *text, gbool try_file) { if(text == NULL) return "about:blank"; char *scheme = g_uri_parse_scheme(text); - if(scheme != NULL) - return text; - else + if(scheme != NULL) return text; + + if(try_file) { gchar *f; char *path; @@ -101,12 +101,11 @@ ensure_uri_scheme(gchar *text) { f = g_strdup_printf("file://%s", path); free(path); + return f; } - else - f = g_strdup_printf("http://%s", text); - - return f; } + + return g_strdup_printf("http://%s", text); } static void @@ -457,7 +456,7 @@ locationCb_activate(GtkEntry *location, gpointer user_data) char *target_url; struct Client *browser = (struct Client *)user_data; - target_url = ensure_uri_scheme((char *)gtk_entry_get_text(location)); + target_url = ensure_uri_scheme((char *)gtk_entry_get_text(location), FALSE); if(target_url != NULL) webkit_web_view_load_uri(browser->webView, target_url); @@ -531,7 +530,7 @@ struct Client * new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web_view) { struct Client *browser = g_malloc(sizeof(struct Client)); - target_url = ensure_uri_scheme(target_url); + target_url = ensure_uri_scheme(target_url, (related_web_view != NULL)); browser->window = window; browser->box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); -- cgit v1.3.1-23-gd82d