From 3cc4d4ac947b8751509498b650bb024533986352 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 27 Mar 2015 14:25:27 +0000 Subject: [PATCH] Fix AST cleanup. --- src/libutil/expression.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/libutil/expression.c b/src/libutil/expression.c index 8696c1cc6..d9f1a1260 100644 --- a/src/libutil/expression.c +++ b/src/libutil/expression.c @@ -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; } -- 2.39.5