aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-08-05 14:15:51 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-08-05 16:06:22 +0100
commitd7acbc3402f81c0e97e6b1ba67fc3c031b660f0d (patch)
tree1e92e88c094bcdb744fbad2549631cea525fcb1e
parent37b9edfcf587e3d7986f08d83c623ab7950a31f6 (diff)
downloadrspamd-d7acbc3402f81c0e97e6b1ba67fc3c031b660f0d.tar.gz
rspamd-d7acbc3402f81c0e97e6b1ba67fc3c031b660f0d.zip
[Fix] Fix parsing of background color
-rw-r--r--src/libserver/html.c22
-rw-r--r--src/libserver/html.h2
-rw-r--r--src/lua/lua_html.c2
3 files changed, 25 insertions, 1 deletions
diff --git a/src/libserver/html.c b/src/libserver/html.c
index d39816f87..e20fbadce 100644
--- a/src/libserver/html.c
+++ b/src/libserver/html.c
@@ -880,6 +880,11 @@ rspamd_html_parse_tag_component (rspamd_mempool_t *pool,
NEW_COMPONENT (RSPAMD_HTML_COMPONENT_CLASS);
}
}
+ else if (len == 7) {
+ if (g_ascii_strncasecmp (begin, "bgcolor", len) == 0) {
+ NEW_COMPONENT (RSPAMD_HTML_COMPONENT_BGCOLOR);
+ }
+ }
}
return ret;
@@ -1584,6 +1589,17 @@ rspamd_html_process_block_tag (rspamd_mempool_t *pool, struct html_tag *tag,
rspamd_html_process_color (comp->start, comp->len, &bl->font_color);
msg_debug_pool ("got color: %xd", bl->font_color.d.val);
}
+ else if (comp->type == RSPAMD_HTML_COMPONENT_BGCOLOR && comp->len > 0) {
+ fstr.begin = (gchar *)comp->start;
+ fstr.len = comp->len;
+ rspamd_html_process_color (comp->start, comp->len, &bl->background_color);
+ msg_debug_pool ("got color: %xd", bl->font_color.d.val);
+
+ if (tag->id == Tag_BODY) {
+ /* Set global background color */
+ memcpy (&hc->bgcolor, &bl->background_color, sizeof (hc->bgcolor));
+ }
+ }
else if (comp->type == RSPAMD_HTML_COMPONENT_STYLE && comp->len > 0) {
bl->style.len = comp->len;
bl->style.start = comp->start;
@@ -1666,6 +1682,12 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool, struct html_content *hc,
hc->tags_seen = rspamd_mempool_alloc0 (pool, NBYTES (G_N_ELEMENTS (tag_defs)));
+ /* Set white background color by default */
+ hc->bgcolor.d.comp.alpha = 0;
+ hc->bgcolor.d.comp.r = 255;
+ hc->bgcolor.d.comp.g = 255;
+ hc->bgcolor.d.comp.b = 255;
+
dest = g_byte_array_sized_new (in->len / 3 * 2);
p = in->data;
diff --git a/src/libserver/html.h b/src/libserver/html.h
index 35af8f05c..218594191 100644
--- a/src/libserver/html.h
+++ b/src/libserver/html.h
@@ -28,6 +28,7 @@ enum html_component_type {
RSPAMD_HTML_COMPONENT_NAME = 0,
RSPAMD_HTML_COMPONENT_HREF,
RSPAMD_HTML_COMPONENT_COLOR,
+ RSPAMD_HTML_COMPONENT_BGCOLOR,
RSPAMD_HTML_COMPONENT_STYLE,
RSPAMD_HTML_COMPONENT_CLASS,
RSPAMD_HTML_COMPONENT_WIDTH,
@@ -105,6 +106,7 @@ struct rspamd_task;
struct html_content {
GNode *html_tags;
gint flags;
+ struct html_color bgcolor;
guchar *tags_seen;
GPtrArray *images;
GPtrArray *blocks;
diff --git a/src/lua/lua_html.c b/src/lua/lua_html.c
index 5e9b8df2b..fe5a409d7 100644
--- a/src/lua/lua_html.c
+++ b/src/lua/lua_html.c
@@ -346,7 +346,7 @@ lua_html_get_blocks (lua_State *L)
lua_settable (L, -3);
}
if (bl->background_color.valid) {
- lua_pushstring (L, "color");
+ lua_pushstring (L, "bgcolor");
lua_newtable (L);
lua_pushnumber (L, bl->background_color.d.comp.r);
lua_rawseti (L, -2, 1);