From: Vsevolod Stakhov Date: Fri, 27 Mar 2015 14:25:27 +0000 (+0000) Subject: Fix AST cleanup. X-Git-Tag: 0.9.0~404 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3cc4d4ac947b8751509498b650bb024533986352;p=rspamd.git Fix AST cleanup. --- 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; }