diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-05-14 13:16:06 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2020-05-14 13:16:06 +0100 |
commit | d43b852a028b6c77f1641361bff3d96f0d0ef4a8 (patch) | |
tree | d445fd1b4328689b08b8a098cf83fb8c4abc08b6 | |
parent | f5095168e1f44c8f02c462a9f34bf34169646492 (diff) | |
download | rspamd-d43b852a028b6c77f1641361bff3d96f0d0ef4a8.tar.gz rspamd-d43b852a028b6c77f1641361bff3d96f0d0ef4a8.zip |
[Fix] Fix regexp selector and add flattening
-rw-r--r-- | lualib/lua_selectors/transforms.lua | 18 | ||||
-rw-r--r-- | test/lua/unit/selectors.lua | 4 |
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 |