summaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-03-09 14:18:06 +0000
committerGitHub <noreply@github.com>2019-03-09 14:18:06 +0000
commitfff6f70c33bbf080301230cbecb6aa00bbb6c5b3 (patch)
tree9b02bf0adba221b8ea6aff79fb982081b10286de /src/libserver
parentf3277faf934a449ca680ba4ce4c3b98906b22af0 (diff)
parent33e60cf84e4c87149e6d00bb12e6744d28e702e9 (diff)
downloadrspamd-fff6f70c33bbf080301230cbecb6aa00bbb6c5b3.tar.gz
rspamd-fff6f70c33bbf080301230cbecb6aa00bbb6c5b3.zip
Merge pull request #2771 from miecio45/feat_url_visible_part
[Minor] Export url visible part to lua and add new url flag
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/html.c26
-rw-r--r--src/libserver/url.h3
2 files changed, 29 insertions, 0 deletions
diff --git a/src/libserver/html.c b/src/libserver/html.c
index 63638d28b..c831dc14e 100644
--- a/src/libserver/html.c
+++ b/src/libserver/html.c
@@ -2377,11 +2377,37 @@ rspamd_html_check_displayed_url (rspamd_mempool_t *pool,
return;
}
+ url->visible_part = rspamd_mempool_alloc0(pool, dest->len - href_offset+1);
+ gchar *current_processed_char = dest->data + href_offset;
+ gchar *current_char_in_struct = url->visible_part;
+ gboolean previous_char_was_space = false;
+
+ while (current_processed_char < (gchar*) dest->data + dest->len) {
+ if (g_ascii_isspace(*current_processed_char)) {
+ if (previous_char_was_space) {
+ current_processed_char++;
+ continue;
+ }
+ previous_char_was_space = true;
+ *current_char_in_struct = ' ';
+ } else {
+ *current_char_in_struct = *current_processed_char;
+ previous_char_was_space = false;
+ }
+ current_char_in_struct++;
+ current_processed_char++;
+ }
+ *current_char_in_struct = '\0';
+ url->visible_partlen = current_char_in_struct - url->visible_part;
+
rspamd_html_url_is_phished (pool, url,
dest->data + href_offset,
dest->len - href_offset,
&url_found, &displayed_url);
+ if (url_found) {
+ url->flags |= RSPAMD_URL_FLAG_DISPLAY_URL;
+ }
if (exceptions && url_found) {
ex = rspamd_mempool_alloc (pool,
sizeof (*ex));
diff --git a/src/libserver/url.h b/src/libserver/url.h
index 3deeb8cf5..ad09c33ec 100644
--- a/src/libserver/url.h
+++ b/src/libserver/url.h
@@ -28,6 +28,7 @@ enum rspamd_url_flags {
RSPAMD_URL_FLAG_SCHEMALESS = 1 << 15,
RSPAMD_URL_FLAG_UNNORMALISED = 1 << 16,
RSPAMD_URL_FLAG_ZW_SPACES = 1 << 17,
+ RSPAMD_URL_FLAG_DISPLAY_URL = 1 << 18,
};
struct rspamd_url_tag {
@@ -48,6 +49,7 @@ struct rspamd_url {
gchar *fragment;
gchar *surbl;
gchar *tld;
+ gchar *visible_part;
struct rspamd_url *phished_url;
@@ -61,6 +63,7 @@ struct rspamd_url {
guint tldlen;
guint urllen;
guint rawlen;
+ guint visible_partlen;
enum rspamd_url_flags flags;
guint count;