From: Vsevolod Stakhov Date: Thu, 9 Jan 2020 15:00:54 +0000 (+0000) Subject: [Fix] More fixes in html tag content calculations X-Git-Tag: 2.3~132 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0255fbd77eb56ec6b78c69d278f7bc138e978e3a;p=thirdparty%2Frspamd.git [Fix] More fixes in html tag content calculations --- diff --git a/src/libserver/html.c b/src/libserver/html.c index 502fa42faa..a6b0378615 100644 --- a/src/libserver/html.c +++ b/src/libserver/html.c @@ -2790,7 +2790,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, goffset old_offset = dest->len; if (content_tag) { - if (content_tag->content_offset == 0) { + if (content_tag->content_length == 0) { content_tag->content_offset = old_offset; } } @@ -2810,7 +2810,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, len = p - c; if (content_tag) { - if (content_tag->content_offset == 0) { + if (content_tag->content_length == 0) { content_tag->content_offset = dest->len; } @@ -2831,7 +2831,18 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, !g_ascii_isspace (dest->data[dest->len - 1])) { g_byte_array_append (dest, " ", 1); if (content_tag) { - content_tag->content_length ++; + if (content_tag->content_length == 0) { + /* + * Special case + * we have a space at the beginning but + * we have no set content_offset + * so we need to do it here + */ + content_tag->content_offset = dest->len; + } + else { + content_tag->content_length++; + } } } save_space = FALSE; @@ -2845,7 +2856,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, goffset old_offset = dest->len; if (content_tag) { - if (content_tag->content_offset == 0) { + if (content_tag->content_length == 0) { content_tag->content_offset = dest->len; } } @@ -2864,7 +2875,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, len = p - c; if (content_tag) { - if (content_tag->content_offset == 0) { + if (content_tag->content_length == 0) { content_tag->content_offset = dest->len; } @@ -2962,7 +2973,18 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, g_byte_array_append (dest, "\r\n", 2); if (content_tag) { - content_tag->content_length += 2; + if (content_tag->content_length == 0) { + /* + * Special case + * we have a \r\n at the beginning but + * we have no set content_offset + * so we need to do it here + */ + content_tag->content_offset = dest->len; + } + else { + content_tag->content_length += 2; + } } } save_space = FALSE; @@ -2975,7 +2997,18 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc, g_byte_array_append (dest, "\r\n", 2); if (content_tag) { - content_tag->content_length += 2; + if (content_tag->content_length == 0) { + /* + * Special case + * we have a \r\n at the beginning but + * we have no set content_offset + * so we need to get it here + */ + content_tag->content_offset = dest->len; + } + else { + content_tag->content_length += 2; + } } } save_space = FALSE; diff --git a/src/lua/lua_html.c b/src/lua/lua_html.c index 43c34797cf..c0e07de36d 100644 --- a/src/lua/lua_html.c +++ b/src/lua/lua_html.c @@ -663,7 +663,7 @@ lua_html_tag_get_content (lua_State *L) struct rspamd_lua_text *t; if (ltag) { - if (ltag->html && ltag->tag->content_offset && ltag->tag->content_length && + if (ltag->html && ltag->tag->content_length && ltag->html->parsed->len >= ltag->tag->content_offset + ltag->tag->content_length) { t = lua_newuserdata (L, sizeof (*t)); rspamd_lua_setclass (L, "rspamd{text}", -1);