aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-01-07 12:53:13 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-01-07 12:53:13 +0000
commit0a334fa2063e63c03dbd1ff5048a154b01ff055a (patch)
treeffa535ce2acf79862ce054ec8bbe1afe2cad70a9 /src/libserver/cfg_rcl.c
parent45c5ffb0c0840d7c7cd6489e42708ec79df9ab2e (diff)
downloadrspamd-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.c17
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;