]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Fix get_all_opts for a case of non-iterable options.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 25 Jun 2015 13:20:52 +0000 (14:20 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 25 Jun 2015 13:20:52 +0000 (14:20 +0100)
src/lua/lua_config.c

index 3e7ba80e2be9929c078c934991da3db516d1f203..54ac7a6d314ab91327d50e7cd6838960f8c7736a 100644 (file)
@@ -411,6 +411,7 @@ lua_config_get_all_opt (lua_State * L)
        const gchar *mname;
        const ucl_object_t *obj, *cur, *cur_elt;
        ucl_object_iter_t it = NULL;
+       gint i;
 
        if (cfg) {
                mname = luaL_checkstring (L, 2);
@@ -418,7 +419,8 @@ lua_config_get_all_opt (lua_State * L)
                if (mname) {
                        obj = ucl_obj_get_key (cfg->rcl_obj, mname);
                        /* Flatten object */
-                       if (obj != NULL && ucl_object_type (obj) == UCL_OBJECT) {
+                       if (obj != NULL && (ucl_object_type (obj) == UCL_OBJECT ||
+                                       ucl_object_type (obj) == UCL_ARRAY)) {
 
                                lua_newtable (L);
                                it = ucl_object_iterate_new (obj);
@@ -435,6 +437,18 @@ lua_config_get_all_opt (lua_State * L)
 
                                ucl_object_iterate_free (it);
 
+                               return 1;
+                       }
+                       else if (obj != NULL) {
+                               lua_newtable (L);
+                               i = 1;
+
+                               LL_FOREACH (obj, cur) {
+                                       lua_pushnumber (L, i++);
+                                       ucl_object_push_lua (L, cur, true);
+                                       lua_settable (L, -3);
+                               }
+
                                return 1;
                        }
                }