]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix regexp selector and add flattening
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 14 May 2020 12:16:06 +0000 (13:16 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 14 May 2020 12:16:06 +0000 (13:16 +0100)
lualib/lua_selectors/transforms.lua
test/lua/unit/selectors.lua

index bbf5f510a0f432fb1465d0cfb13ac34cb755b08f..6f5ed7027ae23e9d127920dd5fe1ffe4c7d082a9 100644 (file)
@@ -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)
index dea80fdbfe959855f2648e237c66e08783cf40f0..cca1d1e5a75e0eaba640d76cf1bbfa3194e5dbfa 100644 (file)
@@ -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