Browse Source

Fix implicit arrays handling in string list parsing.

Conflicts:
	src/libserver/cfg_rcl.c
pull/235/head
Vsevolod Stakhov 9 years ago
parent
commit
0096db4471
1 changed files with 15 additions and 14 deletions
  1. 15
    14
      src/libserver/cfg_rcl.c

+ 15
- 14
src/libserver/cfg_rcl.c View 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,

Loading…
Cancel
Save