]> 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:58:23 +0000 (14:58 +0100)
src/lua/lua_config.c

index ae1f9b0f0633b98c9542626677ff3f9daf657418..3d3270984dfd0243df83d992670d8cd1f00c1ee2 100644 (file)
@@ -429,6 +429,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);
@@ -436,7 +437,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);
@@ -453,6 +455,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;
                        }
                }