From 5194734bd3b441451dbd64c076df953f30248922 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 6 Nov 2018 16:18:54 +0000 Subject: [PATCH] [Minor] Fix various issues with lua_fuzzy --- lualib/lua_fuzzy.lua | 56 +++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/lualib/lua_fuzzy.lua b/lualib/lua_fuzzy.lua index ee5a84e62..f34946c92 100644 --- a/lualib/lua_fuzzy.lua +++ b/lualib/lua_fuzzy.lua @@ -96,12 +96,12 @@ exports.process_rule = function(rule) if processed_rule.policy then policy = policies[processed_rule.policy] + end - if policy then - processed_rule = lua_util.override_defaults(policy, processed_rule) - else - rspamd_logger.warnx(rspamd_config, "unknown policy %s", processed_rule.policy) - end + if policy then + processed_rule = lua_util.override_defaults(policy, processed_rule) + else + rspamd_logger.warnx(rspamd_config, "unknown policy %s", processed_rule.policy) end if processed_rule.mime_types then @@ -110,13 +110,6 @@ exports.process_rule = function(rule) end, processed_rule.mime_types)) end - if processed_rule.extensions then - processed_rule.mime_types = fun.totable(fun.map(function(gl) - return rspamd_regexp.import_glob(gl, 'i') - end, processed_rule.extensions)) - end - - table.insert(rules, processed_rule) return #rules end @@ -124,6 +117,9 @@ end local function check_length(task, part, rule) local length_ok = true + local id = part:get_id() + lua_util.debugm(N, task, 'check size of part %s', id) + if rule.min_bytes then local bytes = part:get_length() local adjusted_bytes = bytes @@ -139,7 +135,12 @@ local function check_length(task, part, rule) 'as it has less than %s bytes', bytes, adjusted_bytes, rule.min_bytes) length_ok = false + else + lua_util.debugm(N, task, 'allow part of length %s (%s adjusted)', + bytes, adjusted_bytes, rule.min_bytes) end + else + lua_util.debugm(N, task, 'allow part %s, no length limits', id) end return length_ok @@ -148,24 +149,36 @@ end local function check_text_part(task, part, rule, text) local allow_direct,allow_shingles = false,false + local id = part:get_id() + lua_util.debugm(N, task, 'check text part %s', id) + if rule.text_shingles then -- Check number of words local wcnt = text:get_words_count() if rule.min_length and wcnt < rule.min_length then - lua_util.debugm(N, task, 'text has less than %s words: %s', + lua_util.debugm(N, task, 'text has less than %s words: %s; disable shingles', rule.min_length, wcnt) allow_shingles = false else + lua_util.debugm(N, task, 'allow shingles in text %s, %s words', + id, wcnt) allow_shingles = true end if not rule.short_text_direct_hash and not allow_shingles then allow_direct = false else - allow_direct = check_length(task, part, rule) + if not allow_shingles then + lua_util.debugm(N, task, + 'allow direct hash for short text %s, %s words', + id, wcnt) + allow_direct = check_length(task, part, rule) + end end else + lua_util.debugm(N, task, + 'disable shingles in text %s', id) allow_direct = check_length(task, part, rule) end @@ -178,6 +191,9 @@ local function check_image_part(task, part, rule, image) return false,false end + local id = part:get_id() + lua_util.debugm(N, task, 'check image part %s', id) + if rule.min_width or rule.min_height then -- Check dimensions local min_width = rule.min_width or rule.min_height @@ -187,10 +203,13 @@ local function check_image_part(task, part, rule, image) if height and width then if height < min_height or width < min_width then - lua_util.debugm(N, task, 'skip image part as it does not meet minimum sizes: %sx%s < %sx%s', - width, height, min_width, min_height) + lua_util.debugm(N, task, 'skip image part %s as it does not meet minimum sizes: %sx%s < %sx%s', + id, width, height, min_width, min_height) return false, false + else + lua_util.debugm(N, task, 'allow image part %s: %sx%s', + id, width, height) end end end @@ -205,6 +224,7 @@ local function mime_types_check(task, part, rule) local ct = string.format('%s/%s', t, st) local id = part:get_id() + lua_util.debugm(N, task, 'check binary part %s: %s', id, ct) -- For bad mime mime parts we implicitly enable fuzzy check local mime_trace = task:get_symbol('MIME_TRACE') @@ -219,6 +239,7 @@ local function mime_types_check(task, part, rule) end, opts)) if opts[id] and opts[id] == '-' then + lua_util.debugm(N, task, 'explicitly check binary part %s: bad mime type %s', id, ct) return check_length(task, part, rule),false end @@ -226,6 +247,7 @@ local function mime_types_check(task, part, rule) if fun.any(function(gl_re) if gl_re:match(ct) then return true else return false end end, rule.mime_types) then + lua_util.debugm(N, task, 'found mime type match for part %s: %s', id, ct) return check_length(task, part, rule),false end @@ -254,6 +276,8 @@ exports.check_mime_part = function(task, part, rule_id) if part:is_archive() and rule.scan_archives then -- Always send archives + lua_util.debugm(N, task, 'check archive part %s', part:get_id()) + return true,false end -- 2.39.5