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