]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Rework lists applications
authorVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 21 Dec 2022 11:40:25 +0000 (11:40 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 21 Dec 2022 11:40:25 +0000 (11:40 +0000)
lualib/lua_selectors/init.lua
lualib/lua_selectors/transforms.lua

index da0ca104f0d828caaba184d8acefec05b8f1fe3e..5823fef9675e038e120b9734b25bf184aca848fa 100644 (file)
@@ -113,12 +113,18 @@ local function process_selector(task, sel)
         lua_util.debugm(M, task, 'map method `%s` to list of %s',
             meth.name, pt)
         -- Map method to a list of inputs, excluding empty elements
-        input = fun.filter(function(map_elt) return map_elt end,
+        -- We need to fold it down here to get a proper type resolution
+        input = fun.totable(fun.filter(function(map_elt, _) return map_elt end,
             fun.map(function(list_elt)
-              local ret, _ = meth.process(list_elt, pt, meth.args)
+              local ret, ty = meth.process(list_elt, pt, meth.args)
+              etype = ty
               return ret
-            end, input))
-        etype = 'string_list'
+            end, input)))
+        if input and etype then
+          etype = etype .. "_list"
+        else
+          input = nil
+        end
       end
     end
     -- Remove method from the pipeline
@@ -195,7 +201,6 @@ local function process_selector(task, sel)
     local pt = pure_type(res[2])
 
     if pt then
-
       lua_util.debugm(M, task, 'apply implicit map %s->string_list', pt)
       res[1] = fun.map(function(e) return implicit_tostring(pt, e) end, res[1])
       res[2] = 'string_list'
index f6a0b0a372875db311250c2b10250e68d674091f..55e1bffb713129d7a2b993eafbc80f87b1e8262e 100644 (file)
@@ -135,7 +135,7 @@ local transform_function = {
   -- Joins tables into a table of strings
   ['join_tables'] = {
     ['types'] = {
-      ['string_list'] = true
+      ['list'] = true
     },
     ['process'] = function(inp, _, args)
       local sep = args[1] or ''
@@ -521,8 +521,7 @@ Empty string comes the first argument or 'true', non-empty string comes nil]],
       for _,arg in ipairs(args) do
         local meth = inp[arg]
         local ret = meth(inp)
-        if not ret then return nil end
-        table.insert(res, tostring(ret))
+        if ret then table.insert(res, tostring(ret)) end
       end
       return res,'string_list'
     end,