From: Vsevolod Stakhov Date: Wed, 21 Dec 2022 11:40:25 +0000 (+0000) Subject: [Fix] Rework lists applications X-Git-Tag: 3.5~137 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=532701a530a30fee3dfb120472e6d4a97f533fc6;p=thirdparty%2Frspamd.git [Fix] Rework lists applications --- diff --git a/lualib/lua_selectors/init.lua b/lualib/lua_selectors/init.lua index da0ca104f0..5823fef967 100644 --- a/lualib/lua_selectors/init.lua +++ b/lualib/lua_selectors/init.lua @@ -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' diff --git a/lualib/lua_selectors/transforms.lua b/lualib/lua_selectors/transforms.lua index f6a0b0a372..55e1bffb71 100644 --- a/lualib/lua_selectors/transforms.lua +++ b/lualib/lua_selectors/transforms.lua @@ -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,