]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Treat last dot specially
authorVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 10 Aug 2023 12:32:02 +0000 (13:32 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 10 Aug 2023 12:32:02 +0000 (13:32 +0100)
src/libserver/url.c
test/lua/unit/url.lua

index ab32549c7a52f0a0a10809ff7104c22bfd179307..ca0b2072e9df7104b5a8e07153257ca34f76534a 100644 (file)
@@ -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;
                                }
index e2daa777139a0ae3aaab33a0bc306dc6e9d18133..52b88d25aee9957d2da96a295917d6677a8bc603 100644 (file)
@@ -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