/* Apply the same logic for TLD */
disp_tok.len = text_url->tldlen;
- disp_tok.begin = text_url->tld;
+ disp_tok.begin = rspamd_url_tld_unsafe (text_url);
#if U_ICU_VERSION_MAJOR_NUM >= 46
- if (rspamd_substring_search_caseless (text_url->tld,
+ if (rspamd_substring_search_caseless (rspamd_url_tld_unsafe (text_url),
text_url->tldlen, "xn--", 4) != -1) {
idn_hbuf = rspamd_mempool_alloc (pool, text_url->tldlen * 2 + 1);
/* We need to convert it to the normal value first */
disp_tok.len = uidna_nameToUnicodeUTF8 (udn,
- text_url->tld, text_url->tldlen,
+ rspamd_url_tld_unsafe (text_url), text_url->tldlen,
idn_hbuf, text_url->tldlen * 2 + 1, &uinfo, &uc_err);
if (uc_err != U_ZERO_ERROR) {
}
#endif
href_tok.len = href_url->tldlen;
- href_tok.begin = href_url->tld;
+ href_tok.begin = rspamd_url_tld_unsafe (href_url);
#if U_ICU_VERSION_MAJOR_NUM >= 46
- if (rspamd_substring_search_caseless (href_url->tld,
+ if (rspamd_substring_search_caseless (rspamd_url_tld_unsafe (href_url),
href_url->tldlen, "xn--", 4) != -1) {
idn_hbuf = rspamd_mempool_alloc (pool, href_url->tldlen * 2 + 1);
/* We need to convert it to the normal value first */
href_tok.len = uidna_nameToUnicodeUTF8 (udn,
- href_url->tld, href_url->tldlen,
+ rspamd_url_tld_unsafe (href_url), href_url->tldlen,
idn_hbuf, href_url->tldlen * 2 + 1, &uinfo, &uc_err);
if (uc_err != U_ZERO_ERROR) {
ucl_object_insert_key (obj, elt, "url", 0, false);
if (url->tldlen > 0) {
- elt = ucl_object_fromstring_common (url->tld, url->tldlen, 0);
+ elt = ucl_object_fromstring_common (rspamd_url_tld_unsafe (url),
+ url->tldlen, 0);
ucl_object_insert_key (obj, elt, "tld", 0, false);
}
if (url->hostlen > 0) {
- elt = ucl_object_fromstring_common (rspamd_url_host_unsafe (url), url->hostlen, 0);
+ elt = ucl_object_fromstring_common (rspamd_url_host_unsafe (url),
+ url->hostlen, 0);
ucl_object_insert_key (obj, elt, "host", 0, false);
}
if ((ndots == 0 || p == start - 1) &&
url->tldlen < rspamd_url_host_unsafe (url) + url->hostlen - pos) {
- url->tld = (gchar *) pos;
+ url->tldshift = (pos - url->string);
url->tldlen = rspamd_url_host_unsafe (url) + url->hostlen - pos;
}
(gint)(uri->hostshift),
uri->string);
uri->hostshift = r;
+ uri->tldshift = r;
start_offset = strbuf + r;
inet_ntop (af, addr, strbuf + r, slen - r + 1);
uri->hostlen = strlen (start_offset);
r += uri->hostlen;
- uri->tld = (const gchar *)start_offset;
uri->tldlen = uri->hostlen;
uri->flags |= RSPAMD_URL_FLAG_NUMERIC;
} else {
if (!rspamd_url_is_ip (uri, pool)) {
/* Assume tld equal to host */
- uri->tld = rspamd_url_host_unsafe (uri);
+ uri->tldshift = uri->hostshift;
uri->tldlen = uri->hostlen;
}
}
rspamd_telephone_normalise_inplace (uri);
if (rspamd_url_host_unsafe (uri)[0] == '+') {
- uri->tld = rspamd_url_host_unsafe (uri) + 1;
+ uri->tldshift = uri->hostshift + 1;
uri->tldlen = uri->hostlen - 1;
}
else {
- uri->tld = rspamd_url_host_unsafe (uri);
+ uri->tldshift = uri->hostshift;
uri->tldlen = uri->hostlen;
}
}
guint datashift;
guint queryshift;
guint fragmentshift;
-
- gchar *tld;
- gchar *visible_part;
-
- struct rspamd_url *phished_url;
-
- guint urllen;
- guint rawlen;
- guint32 flags;
+ guint tldshift;
guint16 protocollen;
guint16 userlen;
guint16 querylen;
guint16 fragmentlen;
guint16 tldlen;
-
guint16 count;
+
+ guint urllen;
+ guint rawlen;
+ guint32 flags;
+
+ gchar *visible_part;
+ struct rspamd_url *phished_url;
};
#define rspamd_url_user(u) ((u)->userlen > 0 ? (u)->string + (u)->usershift : NULL)
#define rspamd_url_host(u) ((u)->hostlen > 0 ? (u)->string + (u)->hostshift : NULL)
#define rspamd_url_host_unsafe(u) ((u)->string + (u)->hostshift)
+#define rspamd_url_tld_unsafe(u) ((u)->string + (u)->tldshift)
#define rspamd_url_data_unsafe(u) ((u)->string + (u)->datashift)
#define rspamd_url_query_unsafe(u) ((u)->string + (u)->queryshift)
uri = ex->ptr;
if (uri && uri->tldlen > 0) {
- token.original.begin = uri->tld;
+ token.original.begin = rspamd_url_tld_unsafe (uri);
token.original.len = uri->tldlen;
}
struct rspamd_lua_url *url = lua_check_url (L, 1);
if (url != NULL && url->url->tldlen > 0) {
- lua_pushlstring (L, url->url->tld, url->url->tldlen);
+ lua_pushlstring (L, rspamd_url_tld_unsafe (url->url), url->url->tldlen);
}
else {
lua_pushnil (L);
if (u->tldlen > 0) {
lua_pushstring (L, "tld");
- lua_pushlstring (L, u->tld, u->tldlen);
+ lua_pushlstring (L, rspamd_url_tld_unsafe (u), u->tldlen);
lua_settable (L, -3);
}