summaryrefslogtreecommitdiffstats
path: root/src/libserver/url.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-08-03 11:27:28 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-08-03 11:27:58 +0100
commitaa1a1c9c09f33cc1e12a874e3577126579397756 (patch)
treef1624ec03b9a8cb58f82144a5aa268cf29fecfd2 /src/libserver/url.c
parentce28e20ba40713f81dc7a9483aa53025c01e971f (diff)
downloadrspamd-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.c13
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;