diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-02-09 16:43:40 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-02-09 16:43:40 +0000 |
commit | c2cbcd8d98ae8e1b8d1ef06bc6dc53f77ac3bd16 (patch) | |
tree | e8742046ad3eac446a64576f9bfd605e583e9ee5 /src/lua/lua_config.c | |
parent | dcbe3146b882a731e1cd82025607bd423bb82024 (diff) | |
download | rspamd-c2cbcd8d98ae8e1b8d1ef06bc6dc53f77ac3bd16.tar.gz rspamd-c2cbcd8d98ae8e1b8d1ef06bc6dc53f77ac3bd16.zip |
Fix some issues found by coverity
Diffstat (limited to 'src/lua/lua_config.c')
-rw-r--r-- | src/lua/lua_config.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index fa778ff6d..1ab7a746b 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -732,6 +732,7 @@ lua_config_register_pre_filter (lua_State *L) cd->callback.ref = luaL_ref (L, LUA_REGISTRYINDEX); cd->cb_is_ref = TRUE; } + cd->L = L; cfg->pre_filters = g_list_prepend (cfg->pre_filters, cd); rspamd_mempool_add_destructor (cfg->cfg_pool, @@ -753,6 +754,7 @@ lua_config_add_radix_map (lua_State *L) description = lua_tostring (L, 3); r = rspamd_mempool_alloc (cfg->cfg_pool, sizeof (radix_compressed_t *)); *r = radix_create_compressed (); + if (!rspamd_map_add (cfg, map_line, description, rspamd_radix_read, rspamd_radix_fin, (void **)r)) { msg_warn_config ("invalid radix map %s", map_line); @@ -760,7 +762,8 @@ lua_config_add_radix_map (lua_State *L) lua_pushnil (L); return 1; } - ud = lua_newuserdata (L, sizeof (radix_compressed_t *)); + + ud = lua_newuserdata (L, sizeof (radix_compressed_t **)); *ud = r; rspamd_lua_setclass (L, "rspamd{radix}", -1); @@ -794,7 +797,7 @@ lua_config_radix_from_config (lua_State *L) r = rspamd_mempool_alloc (cfg->cfg_pool, sizeof (radix_compressed_t *)); *r = radix_create_compressed (); radix_add_generic_iplist (ucl_obj_tostring (obj), r); - ud = lua_newuserdata (L, sizeof (radix_compressed_t *)); + ud = lua_newuserdata (L, sizeof (radix_compressed_t **)); *ud = r; rspamd_lua_setclass (L, "rspamd{radix}", -1); return 1; @@ -823,6 +826,7 @@ lua_config_add_hash_map (lua_State *L) description = lua_tostring (L, 3); r = rspamd_mempool_alloc (cfg->cfg_pool, sizeof (GHashTable *)); *r = g_hash_table_new (rspamd_strcase_hash, rspamd_strcase_equal); + if (!rspamd_map_add (cfg, map_line, description, rspamd_hosts_read, rspamd_hosts_fin, (void **)r)) { msg_warn ("invalid hash map %s", map_line); @@ -830,10 +834,11 @@ lua_config_add_hash_map (lua_State *L) lua_pushnil (L); return 1; } + rspamd_mempool_add_destructor (cfg->cfg_pool, (rspamd_mempool_destruct_t)g_hash_table_destroy, *r); - ud = lua_newuserdata (L, sizeof (GHashTable *)); + ud = lua_newuserdata (L, sizeof (GHashTable **)); *ud = r; rspamd_lua_setclass (L, "rspamd{hash_table}", -1); @@ -857,6 +862,7 @@ lua_config_add_kv_map (lua_State *L) description = lua_tostring (L, 3); r = rspamd_mempool_alloc (cfg->cfg_pool, sizeof (GHashTable *)); *r = g_hash_table_new (rspamd_strcase_hash, rspamd_strcase_equal); + if (!rspamd_map_add (cfg, map_line, description, rspamd_kv_list_read, rspamd_kv_list_fin, (void **)r)) { msg_warn_config ("invalid hash map %s", map_line); @@ -864,10 +870,11 @@ lua_config_add_kv_map (lua_State *L) lua_pushnil (L); return 1; } + rspamd_mempool_add_destructor (cfg->cfg_pool, (rspamd_mempool_destruct_t)g_hash_table_destroy, *r); - ud = lua_newuserdata (L, sizeof (GHashTable *)); + ud = lua_newuserdata (L, sizeof (GHashTable **)); *ud = r; rspamd_lua_setclass (L, "rspamd{hash_table}", -1); @@ -1062,7 +1069,12 @@ lua_config_register_symbols (lua_State *L) gdouble weight = 1.0; if (lua_gettop (L) < 3) { - msg_err_config ("not enough arguments to register a function"); + if (cfg) { + msg_err_config ("not enough arguments to register a function"); + } + + lua_error (L); + return 0; } if (cfg) { @@ -1231,6 +1243,11 @@ lua_config_register_dependency (lua_State * L) const gchar *name = NULL, *from = NULL; gint id; + if (cfg == NULL) { + lua_error (L); + return 0; + } + if (lua_type (L, 2) == LUA_TNUMBER) { id = luaL_checknumber (L, 2); name = luaL_checkstring (L, 3); |