Преглед изворни кода

[Fix] Try to avoid a corner case for `@` pattern

Issue: #4217
tags/3.3
Vsevolod Stakhov пре 1 година
родитељ
комит
ca59cf9fcb
No account linked to committer's email address
1 измењених фајлова са 24 додато и 15 уклоњено
  1. 24
    15
      src/libserver/url.c

+ 24
- 15
src/libserver/url.c Прегледај датотеку

@@ -2489,23 +2489,30 @@ rspamd_url_parse (struct rspamd_url *uri,
}

if (uri->tldlen == 0) {
if (!(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;
if (uri->protocol != PROTOCOL_MAILTO) {
if (!(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;
uri->flags |= RSPAMD_URL_FLAG_NO_TLD;
}
}
else {
/* Ignore IP like domains for mailto, as it is really never supported */
return URI_ERRNO_TLD_MISSING;
}
}

@@ -2980,10 +2987,12 @@ url_email_end (struct url_callback_data *cb,
return FALSE;
}

/* Check the next character after `@` */
if (!g_ascii_isalnum (pos[1]) || !g_ascii_isalnum (*(pos - 1))) {
return FALSE;
}


c = pos - 1;
while (c > cb->begin) {
if (!is_mailsafe (*c)) {

Loading…
Откажи
Сачувај