diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-08-03 11:27:28 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-08-03 11:27:58 +0100 |
commit | aa1a1c9c09f33cc1e12a874e3577126579397756 (patch) | |
tree | f1624ec03b9a8cb58f82144a5aa268cf29fecfd2 /src/libserver/url.c | |
parent | ce28e20ba40713f81dc7a9483aa53025c01e971f (diff) | |
download | rspamd-aa1a1c9c09f33cc1e12a874e3577126579397756.tar.gz rspamd-aa1a1c9c09f33cc1e12a874e3577126579397756.zip |
[Fix] Fix largest possible TLD behaviour
Diffstat (limited to 'src/libserver/url.c')
-rw-r--r-- | src/libserver/url.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libserver/url.c b/src/libserver/url.c index 00d6d3738..83c0a69ea 100644 --- a/src/libserver/url.c +++ b/src/libserver/url.c @@ -1147,12 +1147,13 @@ rspamd_tld_trie_callback (struct rspamd_multipattern *mp, p--; } - if (ndots == 0 || p == start - 1) { + if ((ndots == 0 || p == start - 1) && + url->tldlen < url->host + url->hostlen - pos) { url->tld = (gchar *) pos; url->tldlen = url->host + url->hostlen - pos; } - return 1; + return 0; } static gboolean @@ -1576,9 +1577,11 @@ rspamd_url_parse (struct rspamd_url *uri, gchar *uristring, gsize len, } /* Find TLD part */ - if (rspamd_multipattern_lookup (url_scanner->search_trie, - uri->host, uri->hostlen, - rspamd_tld_trie_callback, uri, NULL) == 0) { + rspamd_multipattern_lookup (url_scanner->search_trie, + uri->host, uri->hostlen, + rspamd_tld_trie_callback, uri, NULL); + + if (uri->tldlen == 0) { /* Ignore URL's without TLD if it is not a numeric URL */ if (!rspamd_url_is_ip (uri, pool)) { return URI_ERRNO_TLD_MISSING; |