commit 32c8c7b: [Minor] More url parsing fixes
Vsevolod Stakhov
vsevolod at highsecure.ru
Fri May 3 10:35:03 UTC 2019
Author: Vsevolod Stakhov
Date: 2019-05-03 11:31:17 +0100
URL: https://github.com/rspamd/rspamd/commit/32c8c7b394d2c4dfa4a520f832a79f93f41a79b7 (HEAD -> master)
[Minor] More url parsing fixes
---
src/libserver/url.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/src/libserver/url.c b/src/libserver/url.c
index ea46c0353..b26bad6c6 100644
--- a/src/libserver/url.c
+++ b/src/libserver/url.c
@@ -569,7 +569,7 @@ rspamd_url_init (const gchar *tld_file)
} \
} while (0)
-static gboolean
+static bool
is_url_start (gchar c)
{
if (c == '(' ||
@@ -583,7 +583,7 @@ is_url_start (gchar c)
return FALSE;
}
-static gboolean
+static bool
is_url_end (gchar c)
{
if (c == ')' ||
@@ -597,6 +597,19 @@ is_url_end (gchar c)
return FALSE;
}
+static bool
+is_domain_start (int p)
+{
+ if (g_ascii_isalnum (p) ||
+ p == '[' ||
+ p == '%' ||
+ (p & 0x80)) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static gint
rspamd_mailto_parse (struct http_parser_url *u,
const gchar *str, gsize len,
@@ -1115,7 +1128,7 @@ rspamd_web_parse (struct http_parser_url *u, const gchar *str, gsize len,
}
break;
case parse_domain_start:
- if (g_ascii_isalnum (t) || t & 0x80) {
+ if (is_domain_start (t)) {
st = parse_domain;
}
else {
@@ -1965,6 +1978,11 @@ rspamd_url_parse (struct rspamd_url *uri,
uri->flags |= RSPAMD_URL_FLAG_UNNORMALISED;
}
+ /* Ensure that hostname starts with something sane (exclude numeric urls) */
+ if (!(is_domain_start (uri->host[0]) || uri->host[0] == ':')) {
+ return URI_ERRNO_BAD_FORMAT;
+ }
+
rspamd_url_shift (uri, unquoted_len, UF_HOST);
if (uri->datalen) {
More information about the Commits
mailing list