From: Vsevolod Stakhov Date: Fri, 31 May 2019 15:16:16 +0000 (+0100) Subject: [Minor] Lua_util: Add callback_from_string routine X-Git-Tag: 2.0~838 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0b00f71a3fd29f6fb48e21eccf49345b26be8e83;p=thirdparty%2Frspamd.git [Minor] Lua_util: Add callback_from_string routine --- diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua index 3e443bce35..3d1a2e7329 100644 --- a/lualib/lua_util.lua +++ b/lualib/lua_util.lua @@ -968,4 +968,24 @@ exports.maybe_obfuscate_string = function(subject, settings, prefix) return subject end +---[[[ +-- @function lua_util.callback_from_string(str) +-- Converts a string like `return function(...) end` to lua function or emits error using +-- `rspamd_config` superglobal +-- @return function object or nil +--]]] +exports.callback_from_string = function(str) + local loadstring = loadstring or load + local ret, res_or_err = pcall(loadstring(str)) + + if not ret or type(res_or_err) ~= 'function' then + rspamd_logger.errx(rspamd_config, 'invalid callback (%s) - must be a function', + res_or_err) + + return nil + end + + return res_or_err +end + return exports