aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-05-14 13:16:06 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-05-14 13:16:06 +0100
commitd43b852a028b6c77f1641361bff3d96f0d0ef4a8 (patch)
treed445fd1b4328689b08b8a098cf83fb8c4abc08b6
parentf5095168e1f44c8f02c462a9f34bf34169646492 (diff)
downloadrspamd-d43b852a028b6c77f1641361bff3d96f0d0ef4a8.tar.gz
rspamd-d43b852a028b6c77f1641361bff3d96f0d0ef4a8.zip
[Fix] Fix regexp selector and add flattening
-rw-r--r--lualib/lua_selectors/transforms.lua18
-rw-r--r--test/lua/unit/selectors.lua4
2 files changed, 17 insertions, 5 deletions
diff --git a/lualib/lua_selectors/transforms.lua b/lualib/lua_selectors/transforms.lua
index bbf5f510a..6f5ed7027 100644
--- a/lualib/lua_selectors/transforms.lua
+++ b/lualib/lua_selectors/transforms.lua
@@ -202,16 +202,24 @@ the second argument is optional hash type (`blake2`, `sha256`, `sha1`, `sha512`,
local res = re:search(inp, false, true)
if res then
- if #res == 1 then
- return res[1],'string'
+ -- Map all results in a single list
+ local flattened_table = {}
+ local function flatten_table(tbl)
+ for _, v in ipairs(tbl) do
+ if type(v) == 'table' then
+ flatten_table(v)
+ else
+ table.insert(flattened_table, v)
+ end
+ end
end
-
- return res,'string_list'
+ flatten_table(res)
+ return flattened_table,'string_list'
end
return nil
end,
- ['description'] = 'Regexp matching',
+ ['description'] = 'Regexp matching, returns all matches flattened in a single list',
['args_schema'] = {ts.string}
},
-- Returns a value if it exists in some map (or acts like a `filter` function)
diff --git a/test/lua/unit/selectors.lua b/test/lua/unit/selectors.lua
index dea80fdbf..cca1d1e5a 100644
--- a/test/lua/unit/selectors.lua
+++ b/test/lua/unit/selectors.lua
@@ -350,6 +350,10 @@ context("Selectors test", function()
selector = "header('Subject'):gsub('a', 'b')",
expect = {"Second, lower-cbsed hebder subject"}
},
+ ["header regexp first"] = {
+ selector = "header('Subject').regexp('.*').first",
+ expect = {"Second, lower-cased header subject"}
+ },
}
for case_name, case in pairs(cases) do