]> source.dussan.org Git - rspamd.git/commitdiff
Fix AST cleanup.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 27 Mar 2015 14:25:27 +0000 (14:25 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 27 Mar 2015 14:25:27 +0000 (14:25 +0000)
src/libutil/expression.c

index 8696c1cc6a5f1db1ccf16065d3540969d343a41f..d9f1a12601aa7208f229594e30f59b9dd4694866 100644 (file)
@@ -864,11 +864,20 @@ rspamd_ast_process_node (struct rspamd_expression *expr, GNode *node,
        return acc;
 }
 
+static gboolean
+rspamd_ast_cleanup_traverse (GNode *n, gpointer d)
+{
+       struct rspamd_expression_elt *elt = n->data;
+
+       elt->value = 0;
+       elt->flags = 0;
+
+       return FALSE;
+}
+
 gint
 rspamd_process_expression (struct rspamd_expression *expr, gpointer data)
 {
-       struct rspamd_expression_elt *elt;
-       guint i;
        gint ret = 0;
 
        g_assert (expr != NULL);
@@ -878,11 +887,8 @@ rspamd_process_expression (struct rspamd_expression *expr, gpointer data)
        ret = rspamd_ast_process_node (expr, expr->ast, data);
 
        /* Cleanup */
-       for (i = 0; i < expr->expressions->len; i ++) {
-               elt = &g_array_index (expr->expressions, struct rspamd_expression_elt, i);
-               elt->value = 0;
-               elt->flags = 0;
-       }
+       g_node_traverse (expr->ast, G_IN_ORDER, G_TRAVERSE_ALL, -1,
+                       rspamd_ast_cleanup_traverse, NULL);
 
        return ret;
 }