From: Vsevolod Stakhov Date: Fri, 27 Sep 2024 11:51:38 +0000 (+0100) Subject: [Fix] Fix DCC `rep` handling X-Git-Tag: 3.10.0~1^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fheads%2Fvstakhov-fix-dcc;p=rspamd.git [Fix] Fix DCC `rep` handling Issue: #5158 --- diff --git a/lualib/lua_scanners/dcc.lua b/lualib/lua_scanners/dcc.lua index 8d5e9e10a..186d1543d 100644 --- a/lualib/lua_scanners/dcc.lua +++ b/lualib/lua_scanners/dcc.lua @@ -198,13 +198,18 @@ local function dcc_check(task, content, digest, rule) local opts = {} local score = 0.0 info = info:lower() - local rep = info:match('rep=([^=%s]+)') + local rep = info:match('rep=(%d+)') -- Adjust reputation if available if rep then - rep = tonumber(rep) - end - if not rep then + rep = (tonumber(rep) or 100.0) / 100.0 + + if rep > 1.0 then + rep = 1.0 + elseif rep < 0.0 then + rep = 0.0 + end + else rep = 1.0 end @@ -213,12 +218,12 @@ local function dcc_check(task, content, digest, rule) if num == 'many' then rnum = lim else - rnum = tonumber(num) + rnum = tonumber(num) or lim end if rnum and rnum >= lim then opts[#opts + 1] = string.format('%s=%s', what, num) - score = score + rep / 3.0 + score = score * rep end end