Browse Source

[Minor] Do not append unbalanced closing tags

tags/2.6
Vsevolod Stakhov 4 years ago
parent
commit
e1339c646f
1 changed files with 14 additions and 15 deletions
  1. 14
    15
      src/libserver/html.c

+ 14
- 15
src/libserver/html.c View File

@@ -263,25 +263,26 @@ rspamd_html_library_init (void)
}

static gboolean
rspamd_html_check_balance (GNode * node, GNode ** cur_level)
rspamd_html_check_balance (struct html_tag *arg, GNode ** cur_level)
{
struct html_tag *arg = node->data, *tmp;
struct html_tag *tmp;
GNode *cur;

if (arg->flags & FL_CLOSING) {
/* First of all check whether this tag is closing tag for parent node */
cur = node->parent;
cur = *cur_level;

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;
}
}
@@ -805,19 +806,17 @@ rspamd_html_process_tag (rspamd_mempool_t *pool, struct html_content *hc,
}

if (hc->total_tags < max_tags) {
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;
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;
}
} else {
hc->total_tags ++;
*balanced = TRUE;
}

hc->total_tags ++;
}
}
else {

Loading…
Cancel
Save