commit 0f36dc9: [Minor] Treat last dot specially

Vsevolod Stakhov vsevolod at rspamd.com
Thu Aug 10 12:35:03 UTC 2023


Author: Vsevolod Stakhov
Date: 2023-08-10 13:32:02 +0100
URL: https://github.com/rspamd/rspamd/commit/0f36dc9a5582091fed54bb2f790b629d8737141e (HEAD -> master)

[Minor] Treat last dot specially

---
 src/libserver/url.c   | 13 +++++++++++--
 test/lua/unit/url.lua | 10 ++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

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


More information about the Commits mailing list