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