]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Lua_selectors: Allow to index numeric arrays in selectors
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 23 Jul 2019 17:02:16 +0000 (18:02 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 23 Jul 2019 17:02:16 +0000 (18:02 +0100)
lualib/lua_selectors.lua
test/lua/unit/selectors.lua

index efe332878fad0a59dc5a7b6d571d6cb91c159989..c123ae637285fd787438ba62ff658289d5c3892c 100644 (file)
@@ -1027,8 +1027,12 @@ exports.parse_selector = function(cfg, str)
       if proc_name:match('^__') then
         -- Special case - method
         local method_name = proc_name:match('^__(.*)$')
+        -- Check array indexing...
+        if tonumber(method_name) then
+          method_name = tonumber(method_name)
+        end
         local processor = {
-          name = method_name,
+          name = tostring(method_name),
           method = true,
           args = proc_tbl[2] or E,
           types = {
@@ -1052,7 +1056,7 @@ exports.parse_selector = function(cfg, str)
 
         if not transform_function[proc_name] then
           logger.errx(cfg, 'processor %s is unknown', proc_name)
-          pipeline_error = true
+          pipeline_error = proc_name
           return nil
         end
         local processor = lua_util.shallowcopy(transform_function[proc_name])
@@ -1060,7 +1064,7 @@ exports.parse_selector = function(cfg, str)
         processor.args = proc_tbl[2] or E
 
         if not check_args(processor.name, processor.args_schema, processor.args) then
-          pipeline_error = true
+          pipeline_error = 'args schema for ' .. proc_name
           return nil
         end
 
@@ -1071,7 +1075,7 @@ exports.parse_selector = function(cfg, str)
     end, fun.tail(sel))
 
     if pipeline_error then
-      logger.errx(cfg, 'unknown or invalid processor used, exiting')
+      logger.errx(cfg, 'unknown or invalid processor used: "%s", exiting', pipeline_error)
       return nil
     end
 
index 2fb839be10f5e39eec916274d40da75639f5e12f..cb3e61f8f7e1b99b8711da1440e50810bbb1fa6a 100644 (file)
@@ -271,6 +271,10 @@ context("Selectors test", function()
       selector = "words('norm')",
       expect = {{'hello', 'world', 'mail', 'me'}}
     },
+    ["words_full"] = {
+      selector = "words('full'):2",
+      expect = {{'hello', 'world', '', 'mail', 'me'}}
+    },
   }
 
   for case_name, case in pairs(cases) do