commit 0255fbd: [Fix] More fixes in html tag content calculations

Vsevolod Stakhov vsevolod at highsecure.ru
Thu Jan 9 15:07:06 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-01-09 15:00:54 +0000
URL: https://github.com/rspamd/rspamd/commit/0255fbd77eb56ec6b78c69d278f7bc138e978e3a (HEAD -> master)

[Fix] More fixes in html tag content calculations

---
 src/libserver/html.c | 47 ++++++++++++++++++++++++++++++++++++++++-------
 src/lua/lua_html.c   |  2 +-
 2 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/src/libserver/html.c b/src/libserver/html.c
index 502fa42fa..a6b037861 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 43c34797c..c0e07de36 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);


More information about the Commits mailing list