From 0096db4471497a586c319f529bd1fe13a9891fdb Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 20 Mar 2015 15:16:40 +0000 Subject: [PATCH] Fix implicit arrays handling in string list parsing. Conflicts: src/libserver/cfg_rcl.c --- src/libserver/cfg_rcl.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index ed6085e79a..58cb01b928 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -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, -- 2.47.3