Skip to content

Commit

Permalink
[Fix] Treat hostnames with no dots as eSLD of their own
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed Nov 26, 2022
1 parent 4d2c290 commit b8d890c
Showing 1 changed file with 30 additions and 20 deletions.
50 changes: 30 additions & 20 deletions src/libserver/url.c
Expand Up @@ -2492,31 +2492,41 @@ rspamd_url_parse (struct rspamd_url *uri,
}

if (uri->tldlen == 0) {
if (uri->protocol != PROTOCOL_MAILTO) {
if (url_scanner->has_tld_file && !(parse_flags & RSPAMD_URL_PARSE_HREF)) {
/* Ignore URL's without TLD if it is not a numeric URL */
if (!rspamd_url_is_ip(uri, pool)) {
return URI_ERRNO_TLD_MISSING;
/*
* If we have not detected eSLD, but there are no dots in the hostname,
* then we should treat the whole hostname as eSLD - a rule of thumb
*/
if (uri->hostlen > 0 && memchr(rspamd_url_host_unsafe(uri), '.', uri->hostlen) == NULL) {
uri->tldlen = uri->hostlen;
uri->tldshift = uri->hostshift;
}
else {
if (uri->protocol != PROTOCOL_MAILTO) {
if (url_scanner->has_tld_file && !(parse_flags & RSPAMD_URL_PARSE_HREF)) {
/* Ignore URL's without TLD if it is not a numeric URL */
if (!rspamd_url_is_ip(uri, pool)) {
return URI_ERRNO_TLD_MISSING;
}
}
else {
if (!rspamd_url_is_ip(uri, pool)) {
/* Assume tld equal to host */
uri->tldshift = uri->hostshift;
uri->tldlen = uri->hostlen;
}
else if (uri->flags & RSPAMD_URL_FLAG_SCHEMALESS) {
/* Ignore urls with both no schema and no tld */
return URI_ERRNO_TLD_MISSING;
}

uri->flags |= RSPAMD_URL_FLAG_NO_TLD;
}
}
else {
if (!rspamd_url_is_ip(uri, pool)) {
/* Assume tld equal to host */
uri->tldshift = uri->hostshift;
uri->tldlen = uri->hostlen;
}
else if (uri->flags & RSPAMD_URL_FLAG_SCHEMALESS) {
/* Ignore urls with both no schema and no tld */
return URI_ERRNO_TLD_MISSING;
}

uri->flags |= RSPAMD_URL_FLAG_NO_TLD;
/* Ignore IP like domains for mailto, as it is really never supported */
return URI_ERRNO_TLD_MISSING;
}
}
else {
/* Ignore IP like domains for mailto, as it is really never supported */
return URI_ERRNO_TLD_MISSING;
}
}

/* Replace stupid '\' with '/' after schema */
Expand Down

0 comments on commit b8d890c

Please sign in to comment.