From 2801de37638347280be76be5c7e34b1237236b7d Mon Sep 17 00:00:00 2001 From: Xan Lopez Date: Tue, 14 Aug 2012 18:09:08 +0200 Subject: ephy-web-view: ignore paths when deciding whether a URI has a TLD SoupTLD is not happy if we give it something like ".com/blah/blah". Add a unit test for this case too. --- embed/ephy-web-view.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'embed') diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c index f27226555..5caa27a58 100644 --- a/embed/ephy-web-view.c +++ b/embed/ephy-web-view.c @@ -2853,20 +2853,35 @@ ephy_web_view_new (void) static gboolean is_public_domain (EphyWebView *view, const char *url) { + SoupURI *soup_uri; + gboolean retval = FALSE; + const char *host = NULL; EphyWebViewPrivate *priv = view->priv; - if (g_regex_match (priv->domain_regex, url, 0, NULL)) { - if (g_str_equal (url, "localhost")) - return TRUE; + soup_uri = soup_uri_new (url); + if (!soup_uri) { + char *effective_url = g_strconcat ("http://", url, NULL); + soup_uri = soup_uri_new (effective_url); + g_free (effective_url); + } + g_return_val_if_fail (soup_uri, FALSE); + + host = soup_uri->host; - url = g_strrstr (url, "."); - if (!url || *url == '\0') - return FALSE; + if (g_regex_match (priv->domain_regex, host, 0, NULL)) { + if (g_str_equal (host, "localhost")) + retval = TRUE; + else { + host = g_strrstr (host, "."); - return soup_tld_domain_is_public_suffix (url); + if (host && *host != '\0') + retval = soup_tld_domain_is_public_suffix (host); + } } - return FALSE; + soup_uri_free (soup_uri); + + return retval; } /** -- cgit