From: Vsevolod Stakhov Date: Wed, 4 Feb 2015 15:22:01 +0000 (+0000) Subject: Allow single string to be in a string list. X-Git-Tag: 0.9.0~767 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=bed11b57981363694a6ed656941fe19b5acb1b87;p=rspamd.git Allow single string to be in a string list. --- diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index 6074d637d..14ee4acca 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -1864,41 +1864,49 @@ 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; + if (obj->type == UCL_STRING) { + /* Just a single string */ + val = rspamd_mempool_strdup (cfg->cfg_pool, + ucl_copy_value_trash (obj)); + *target = g_list_prepend (*target, val); } - - while ((cur = ucl_iterate_object (obj, &iter, true)) != NULL) { - switch (cur->type) { - case UCL_STRING: - 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); - rspamd_snprintf (val, num_str_len, "%L", cur->value.iv); - break; - case UCL_FLOAT: - val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len); - rspamd_snprintf (val, num_str_len, "%f", cur->value.dv); - break; - case UCL_BOOLEAN: - val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len); - rspamd_snprintf (val, num_str_len, "%b", (gboolean)cur->value.iv); - break; - default: - g_set_error (err, + else if (obj->type == UCL_ARRAY) { + + while ((cur = ucl_iterate_object (obj, &iter, true)) != NULL) { + switch (cur->type) { + case UCL_STRING: + 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); + rspamd_snprintf (val, num_str_len, "%L", cur->value.iv); + break; + case UCL_FLOAT: + val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len); + rspamd_snprintf (val, num_str_len, "%f", cur->value.dv); + break; + case UCL_BOOLEAN: + val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len); + rspamd_snprintf (val, num_str_len, "%b", (gboolean)cur->value.iv); + break; + default: + g_set_error (err, + CFG_RCL_ERROR, + EINVAL, + "cannot convert an object or array to string"); + return FALSE; + } + *target = g_list_prepend (*target, val); + } + } + else { + g_set_error (err, CFG_RCL_ERROR, EINVAL, - "cannot convert an object or array to string"); - return FALSE; - } - *target = g_list_prepend (*target, val); + "an array of strings is expected"); + return FALSE; } /* Add a destructor */