From 4fb77a80c94a7600c45d06a05d1410de7e50de65 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 16 Jul 2020 16:08:41 +0100 Subject: [PATCH] [Minor] Add link tag basic processing --- src/libserver/html.c | 32 ++++++++++++++++++++++++++++++++ src/libserver/html.h | 1 + 2 files changed, 33 insertions(+) diff --git a/src/libserver/html.c b/src/libserver/html.c index 7b570bdc4f..0ba2a374a8 100644 --- a/src/libserver/html.c +++ b/src/libserver/html.c @@ -923,6 +923,9 @@ rspamd_html_parse_tag_component (rspamd_mempool_t *pool, if (g_ascii_strncasecmp (p, "src", len) == 0) { NEW_COMPONENT (RSPAMD_HTML_COMPONENT_HREF); } + else if (g_ascii_strncasecmp (p, "rel", len) == 0) { + NEW_COMPONENT (RSPAMD_HTML_COMPONENT_REL); + } } else if (len == 4) { if (g_ascii_strncasecmp (p, "href", len) == 0) { @@ -1893,6 +1896,31 @@ rspamd_html_process_img_tag (rspamd_mempool_t *pool, struct html_tag *tag, tag->extra = img; } +static void +rspamd_html_process_link_tag (rspamd_mempool_t *pool, struct html_tag *tag, + struct html_content *hc, khash_t (rspamd_url_hash) *url_set, + GPtrArray *part_urls) +{ + struct html_tag_component *comp; + GList *cur; + + cur = tag->params->head; + + while (cur) { + comp = cur->data; + + if (comp->type == RSPAMD_HTML_COMPONENT_REL && comp->len > 0) { + if (comp->len == sizeof ("icon") - 1 && + rspamd_lc_cmp (comp->start, "icon", sizeof ("icon") - 1) == 0) { + + rspamd_html_process_img_tag (pool, tag, hc, url_set, part_urls); + } + } + + cur = g_list_next (cur); + } +} + static void rspamd_html_process_color (const gchar *line, guint len, struct html_color *cl) { @@ -3163,6 +3191,10 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, rspamd_html_process_img_tag (pool, cur_tag, hc, url_set, part_urls); } + else if (cur_tag->id == Tag_LINK && !(cur_tag->flags & FL_CLOSING)) { + rspamd_html_process_link_tag (pool, cur_tag, hc, url_set, + part_urls); + } else if (cur_tag->flags & FL_BLOCK) { struct html_block *bl; diff --git a/src/libserver/html.h b/src/libserver/html.h index b319964ce9..377eda430b 100644 --- a/src/libserver/html.h +++ b/src/libserver/html.h @@ -42,6 +42,7 @@ enum html_component_type { RSPAMD_HTML_COMPONENT_WIDTH, RSPAMD_HTML_COMPONENT_HEIGHT, RSPAMD_HTML_COMPONENT_SIZE, + RSPAMD_HTML_COMPONENT_REL, }; struct html_tag_component {