]> source.dussan.org Git - rspamd.git/commitdiff
Revert "[Minor] Do not append unbalanced closing tags"
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 30 Apr 2020 15:55:22 +0000 (16:55 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 30 Apr 2020 15:55:22 +0000 (16:55 +0100)
This reverts commit e1339c646f9a910f4cc1805020af35a7c1f82a1d.

src/libserver/html.c

index 33f3dc67621ba63f0b79cb06938e4966c0ec4aa1..80fa3479b2734535f1f1722f74eb81da228fc1c3 100644 (file)
@@ -268,26 +268,25 @@ rspamd_html_library_init (void)
 }
 
 static gboolean
-rspamd_html_check_balance (struct html_tag *arg, GNode ** cur_level)
+rspamd_html_check_balance (GNode * node, GNode ** cur_level)
 {
-       struct html_tag *tmp;
+       struct html_tag *arg = node->data, *tmp;
        GNode *cur;
 
        if (arg->flags & FL_CLOSING) {
                /* First of all check whether this tag is closing tag for parent node */
-               cur = *cur_level;
-
+               cur = node->parent;
                while (cur && cur->data) {
                        tmp = cur->data;
-
                        if (tmp->id == arg->id &&
                                (tmp->flags & FL_CLOSED) == 0) {
                                tmp->flags |= FL_CLOSED;
+                               /* Destroy current node as we find corresponding parent node */
+                               g_node_destroy (node);
                                /* Change level */
                                *cur_level = cur->parent;
                                return TRUE;
                        }
-
                        cur = cur->parent;
                }
        }
@@ -811,17 +810,19 @@ rspamd_html_process_tag (rspamd_mempool_t *pool, struct html_content *hc,
                        }
 
                        if (hc->total_tags < max_tags) {
-                               if (!rspamd_html_check_balance (tag, cur_level)) {
-                                       if (!(hc->flags & RSPAMD_HTML_FLAG_UNBALANCED)) {
-                                               msg_debug_html (
-                                                               "mark part as unbalanced as it has not pairable closing tags");
-                                               hc->flags |= RSPAMD_HTML_FLAG_UNBALANCED;
-                                               *balanced = FALSE;
-                                       }
+                               nnode = g_node_new (tag);
+                               g_node_append (*cur_level, nnode);
+
+                               if (!rspamd_html_check_balance (nnode, cur_level)) {
+                                       msg_debug_html (
+                                                       "mark part as unbalanced as it has not pairable closing tags");
+                                       hc->flags |= RSPAMD_HTML_FLAG_UNBALANCED;
+                                       *balanced = FALSE;
                                } else {
-                                       hc->total_tags ++;
                                        *balanced = TRUE;
                                }
+
+                               hc->total_tags ++;
                        }
                }
                else {