]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Fix parsing of strings lists from implicit arrays
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 7 Jan 2016 12:53:13 +0000 (12:53 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 7 Jan 2016 12:53:13 +0000 (12:53 +0000)
src/libserver/cfg_rcl.c

index e01d2de0b8c4a6454fcd78b325a01b7f04994c91..172bb5a901bcb5a4416b2d59948952fb15b005b2 100644 (file)
@@ -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;