diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-01-07 12:53:13 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-01-07 12:53:13 +0000 |
commit | 0a334fa2063e63c03dbd1ff5048a154b01ff055a (patch) | |
tree | ffa535ce2acf79862ce054ec8bbe1afe2cad70a9 /src/libserver/cfg_rcl.c | |
parent | 45c5ffb0c0840d7c7cd6489e42708ec79df9ab2e (diff) | |
download | rspamd-0a334fa2063e63c03dbd1ff5048a154b01ff055a.tar.gz rspamd-0a334fa2063e63c03dbd1ff5048a154b01ff055a.zip |
Fix parsing of strings lists from implicit arrays
Diffstat (limited to 'src/libserver/cfg_rcl.c')
-rw-r--r-- | src/libserver/cfg_rcl.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index e01d2de0b..172bb5a90 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -2531,12 +2531,16 @@ rspamd_rcl_parse_struct_string_list (rspamd_mempool_t *pool, const ucl_object_t *cur; const gsize num_str_len = 32; ucl_object_iter_t iter = NULL; - gboolean is_hash; + gboolean is_hash, need_destructor = TRUE; is_hash = pd->flags & RSPAMD_CL_FLAG_STRING_LIST_HASH; target = (gpointer *)(((gchar *)pd->user_struct) + pd->offset); + if (!is_hash && *target != NULL) { + need_destructor = FALSE; + } + iter = ucl_object_iterate_new (obj); while ((cur = ucl_object_iterate_safe (iter, true)) != NULL) { @@ -2586,13 +2590,14 @@ rspamd_rcl_parse_struct_string_list (rspamd_mempool_t *pool, return FALSE; } - /* Add a destructor */ - if (!is_hash && *target != NULL) { *target = g_list_reverse (*target); - rspamd_mempool_add_destructor (pool, - (rspamd_mempool_destruct_t) g_list_free, - *target); + + if (need_destructor) { + rspamd_mempool_add_destructor (pool, + (rspamd_mempool_destruct_t) g_list_free, + *target); + } } return TRUE; |