]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Add link tag basic processing
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 16 Jul 2020 15:08:41 +0000 (16:08 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 16 Jul 2020 15:08:41 +0000 (16:08 +0100)
src/libserver/html.c
src/libserver/html.h

index 7b570bdc4f4d3f42c34d7b381a97330fe55e07b1..0ba2a374a8bf7646f9409dcbd104e3882126053c 100644 (file)
@@ -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;
 
index b319964ce9d7e080c968cb87c60837d0be460291..377eda430b147dd0f86f84a6c49a1101d57f4971 100644 (file)
@@ -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 {