diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-09-01 13:35:13 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-09-01 13:35:13 +0100 |
commit | 6b80e5120a9edeebee4e266fc17c81e2a5ddaf40 (patch) | |
tree | f4bd1e271977503db3a4292e201f332aa367ace4 /src/libserver/cfg_rcl.c | |
parent | 760522c4da986f19e864da6123ba938f5e7d25d2 (diff) | |
download | rspamd-6b80e5120a9edeebee4e266fc17c81e2a5ddaf40.tar.gz rspamd-6b80e5120a9edeebee4e266fc17c81e2a5ddaf40.zip |
[Minor] Add function to get a lua_reference from a string returning a function
Diffstat (limited to 'src/libserver/cfg_rcl.c')
-rw-r--r-- | src/libserver/cfg_rcl.c | 53 |
1 files changed, 9 insertions, 44 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index d91ebf3ae..717b16bea 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -1220,7 +1220,7 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool, gboolean res = TRUE; struct rspamd_rcl_section *stat_section; struct rspamd_tokenizer_config *tkcf = NULL; - lua_State *L; + lua_State *L = cfg->lua_state; g_assert (key != NULL); ccf = rspamd_config_new_classifier (cfg, NULL); @@ -1303,59 +1303,24 @@ rspamd_rcl_classifier_handler (rspamd_mempool_t *pool, if (val) { LL_FOREACH (val, cur) { - if (ucl_object_type (cur) == UCL_STRING) { + if (ucl_object_type(cur) == UCL_STRING) { const gchar *lua_script; gsize slen; - gint err_idx, ref_idx; - - lua_script = ucl_object_tolstring (cur, &slen); - L = cfg->lua_state; - lua_pushcfunction (L, &rspamd_lua_traceback); - err_idx = lua_gettop (L); - + gint ref_idx; - /* Load file */ - if (luaL_loadbuffer (L, lua_script, slen, "learn_condition") != 0) { - g_set_error (err, - CFG_RCL_ERROR, - EINVAL, - "cannot load lua condition script: %s", - lua_tostring (L, -1)); - lua_settop (L, 0); /* Error function */ + lua_script = ucl_object_tolstring(cur, &slen); + ref_idx = rspamd_lua_function_ref_from_str(L, + lua_script, slen, err); + if (ref_idx == LUA_NOREF) { return FALSE; } - /* Now do it */ - if (lua_pcall (L, 0, 1, err_idx) != 0) { - g_set_error (err, - CFG_RCL_ERROR, - EINVAL, - "cannot init lua condition script: %s", - lua_tostring (L, -1)); - lua_settop (L, 0); - - return FALSE; - } - - if (!lua_isfunction (L, -1)) { - g_set_error (err, - CFG_RCL_ERROR, - EINVAL, - "cannot init lua condition script: " - "must return function"); - lua_settop (L, 0); - - return FALSE; - } - - ref_idx = luaL_ref (L, LUA_REGISTRYINDEX); - rspamd_lua_add_ref_dtor (L, cfg->cfg_pool, ref_idx); - ccf->learn_conditions = rspamd_mempool_glist_append ( + rspamd_lua_add_ref_dtor(L, cfg->cfg_pool, ref_idx); + ccf->learn_conditions = rspamd_mempool_glist_append( cfg->cfg_pool, ccf->learn_conditions, GINT_TO_POINTER (ref_idx)); - lua_settop (L, 0); } } } |