From: Vsevolod Stakhov Date: Thu, 10 Aug 2023 12:32:02 +0000 (+0100) Subject: [Minor] Treat last dot specially X-Git-Tag: 3.7.1~83 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=0f36dc9a5582091fed54bb2f790b629d8737141e;p=rspamd.git [Minor] Treat last dot specially --- diff --git a/src/libserver/url.c b/src/libserver/url.c index ab32549c7..ca0b2072e 100644 --- a/src/libserver/url.c +++ b/src/libserver/url.c @@ -2474,9 +2474,10 @@ rspamd_url_parse(struct rspamd_url *uri, } } + char last_c = rspamd_url_host_unsafe(uri)[uri->hostlen - 1]; + if (all_chars_domain) { /* Also check the last character to be either a dot or alphanumeric character */ - char last_c = rspamd_url_host_unsafe(uri)[uri->hostlen - 1]; if (last_c != '.' && !g_ascii_isalnum(last_c)) { all_chars_domain = false; } @@ -2485,7 +2486,15 @@ rspamd_url_parse(struct rspamd_url *uri, if (all_chars_domain) { /* Additionally check for a numeric IP as we can have some number here... */ rspamd_url_maybe_regenerate_from_ip(uri, pool); - uri->tldlen = uri->hostlen; + + if (last_c == '.' && uri->hostlen > 1) { + /* Skip the last dot */ + uri->tldlen = uri->hostlen - 1; + } + else { + uri->tldlen = uri->hostlen; + } + uri->tldshift = uri->hostshift; is_whole_hostname_tld = true; } diff --git a/test/lua/unit/url.lua b/test/lua/unit/url.lua index e2daa7771..52b88d25a 100644 --- a/test/lua/unit/url.lua +++ b/test/lua/unit/url.lua @@ -148,6 +148,16 @@ context("URL check functions", function() host = "63.143.41.164", path = "pro/au.html", } }, + { + "http://localhost", true, { + host = "localhost", + tld = "localhost", + } }, + { + "http://localhost.", true, { + host = "localhost.", + tld = "localhost", + } }, } -- Some cases from https://code.google.com/p/google-url/source/browse/trunk/src/url_canon_unittest.cc