]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Fix implicit arrays handling in string list parsing. 235/head
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 20 Mar 2015 15:16:40 +0000 (15:16 +0000)
committerAndrew Lewis <nerf@judo.za.org>
Fri, 20 Mar 2015 15:57:31 +0000 (17:57 +0200)
Conflicts:
src/libserver/cfg_rcl.c

src/libserver/cfg_rcl.c

index ed6085e79ac2402cbbd53fa220dc8cbdea3fdc5f..58cb01b92862e5359199b2372ca7e0e787444c8e 100644 (file)
@@ -1845,20 +1845,13 @@ rspamd_rcl_parse_struct_string_list (struct rspamd_config *cfg,
 
        target = (GList **)(((gchar *)pd->user_struct) + pd->offset);
 
-       if (obj->type != UCL_ARRAY) {
-               g_set_error (err,
-                       CFG_RCL_ERROR,
-                       EINVAL,
-                       "an array of strings is expected");
-               return FALSE;
-       }
+       iter = ucl_object_iterate_new (obj);
 
-       while ((cur = ucl_iterate_object (obj, &iter, true)) != NULL) {
+       while ((cur = ucl_object_iterate_safe (iter, true)) != NULL) {
                switch (cur->type) {
                case UCL_STRING:
-                       val =
-                               rspamd_mempool_strdup (cfg->cfg_pool,
-                                       ucl_copy_value_trash (cur));
+                       val = rspamd_mempool_strdup (cfg->cfg_pool,
+                                                       ucl_copy_value_trash (cur));
                        break;
                case UCL_INT:
                        val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
@@ -1874,14 +1867,22 @@ rspamd_rcl_parse_struct_string_list (struct rspamd_config *cfg,
                        break;
                default:
                        g_set_error (err,
-                               CFG_RCL_ERROR,
-                               EINVAL,
-                               "cannot convert an object or array to string");
+                                       CFG_RCL_ERROR,
+                                       EINVAL,
+                                       "cannot convert an object or array to string");
                        return FALSE;
                }
                *target = g_list_prepend (*target, val);
        }
 
+       if (*target == NULL) {
+               g_set_error (err,
+                       CFG_RCL_ERROR,
+                       EINVAL,
+                       "an array of strings is expected");
+               return FALSE;
+       }
+
        /* Add a destructor */
        rspamd_mempool_add_destructor (cfg->cfg_pool,
                (rspamd_mempool_destruct_t)g_list_free,