Browse Source

[Fix] Fix white on white rule and add is_leaf flag

tags/2.3
Vsevolod Stakhov 4 years ago
parent
commit
663a156d5c
3 changed files with 27 additions and 14 deletions
  1. 6
    7
      rules/html.lua
  2. 12
    6
      src/libserver/html.c
  3. 9
    1
      src/lua/lua_html.c

+ 6
- 7
rules/html.lua View File

@@ -194,18 +194,18 @@ local vis_check_id = rspamd_config:register_symbol{
if p:is_html() and p:get_html() then -- if the current part is html part
local hc = p:get_html() -- we get HTML context

hc:foreach_tag({'font', 'span', 'div', 'p', 'td'}, function(tag)
hc:foreach_tag({'font', 'span', 'div', 'p', 'td'}, function(tag, clen, is_leaf)
local bl = tag:get_extra()
if bl then
if not bl['visible'] then
if not bl['visible'] and is_leaf then
invisible_blocks = invisible_blocks + 1
end

if bl['font_size'] and bl['font_size'] == 0 then
if bl['font_size'] and bl['font_size'] == 0 and is_leaf then
zero_size_blocks = zero_size_blocks + 1
end

if bl['bgcolor'] and bl['color'] and bl['visible'] then
if bl['bgcolor'] and bl['color'] and bl['visible'] and is_leaf then

local color = bl['color']
local bgcolor = bl['bgcolor']
@@ -225,10 +225,9 @@ local vis_check_id = rspamd_config:register_symbol{

if diff < 0.1 then
ret = true
local content_len = #(tag:get_content() or {})
invisible_blocks = invisible_blocks + 1 -- This block is invisible
transp_len = transp_len + content_len * (0.1 - diff) * 10.0
normal_len = normal_len - content_len
transp_len = transp_len + clen * (0.1 - diff) * 10.0
normal_len = normal_len - clen
local tr = transp_len / (normal_len + transp_len)
if tr > transp_rate then
transp_rate = tr

+ 12
- 6
src/libserver/html.c View File

@@ -2324,14 +2324,16 @@ rspamd_html_process_block_tag (rspamd_mempool_t *pool, struct html_tag *tag,
fstr.len = comp->len;
rspamd_html_process_color (comp->start, comp->len,
&bl->font_color);
msg_debug_html ("got color: %xd", bl->font_color.d.val);
msg_debug_html ("tag %*s; got color: %xd",
tag->name.len, tag->name.start, bl->font_color.d.val);
break;
case RSPAMD_HTML_COMPONENT_BGCOLOR:
fstr.begin = (gchar *) comp->start;
fstr.len = comp->len;
rspamd_html_process_color (comp->start, comp->len,
&bl->background_color);
msg_debug_html ("got color: %xd", bl->font_color.d.val);
msg_debug_html ("tag %*s; got color: %xd",
tag->name.len, tag->name.start, bl->font_color.d.val);

if (tag->id == Tag_BODY) {
/* Set global background color */
@@ -2342,21 +2344,25 @@ rspamd_html_process_block_tag (rspamd_mempool_t *pool, struct html_tag *tag,
case RSPAMD_HTML_COMPONENT_STYLE:
bl->style.len = comp->len;
bl->style.start = comp->start;
msg_debug_html ("got style: %*s", (gint) bl->style.len,
bl->style.start);
msg_debug_html ("tag: %*s; got style: %*s",
tag->name.len, tag->name.start,
(gint) bl->style.len, bl->style.start);
rspamd_html_process_style (pool, bl, hc, comp->start, comp->len);
break;
case RSPAMD_HTML_COMPONENT_CLASS:
fstr.begin = (gchar *) comp->start;
fstr.len = comp->len;
bl->html_class = rspamd_mempool_ftokdup (pool, &fstr);
msg_debug_html ("got class: %s", bl->html_class);
msg_debug_html ("tag: %*s; got class: %s",
tag->name.len, tag->name.start, bl->html_class);
break;
case RSPAMD_HTML_COMPONENT_SIZE:
/* Not supported by html5 */
/* FIXME maybe support it */
bl->font_size = 16;
msg_debug_html ("got size: %*s", (gint)comp->len, comp->start);
msg_debug_html ("tag %*s; got size: %*s",
tag->name.len, tag->name.start,
(gint)comp->len, comp->start);
break;
default:
/* NYI */

+ 9
- 1
src/lua/lua_html.c View File

@@ -470,7 +470,15 @@ lua_html_node_foreach_cb (GNode *n, gpointer d)
rspamd_lua_setclass (ud->L, "rspamd{html_tag}", -1);
lua_pushinteger (ud->L, tag->content_length);

if (lua_pcall (ud->L, 2, 1, 0) != 0) {
/* Leaf flag */
if (g_node_first_child (n)) {
lua_pushboolean (ud->L, false);
}
else {
lua_pushboolean (ud->L, true);
}

if (lua_pcall (ud->L, 3, 1, 0) != 0) {
msg_err ("error in foreach_tag callback: %s", lua_tostring (ud->L, -1));
lua_pop (ud->L, 1);
return TRUE;

Loading…
Cancel
Save