]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: use stmt_evaluate_arg() in all cases
authorPatrick McHardy <kaber@trash.net>
Mon, 12 Jan 2015 10:10:42 +0000 (10:10 +0000)
committerPatrick McHardy <kaber@trash.net>
Mon, 12 Jan 2015 13:29:37 +0000 (13:29 +0000)
When using a symbolic vmap expression, we fail to verify that the map
actually contains verdicts.

Use stmt_evaluate_arg() everywhere to fix this.

Signed-off-by: Patrick McHardy <kaber@trash.net>
src/evaluate.c

index 90c87d09abf4e68938e31b439c13d9e6c96d54f7..a3484c66fcfee703a25aeb8a75e5039eae1e9afd 100644 (file)
@@ -1135,8 +1135,7 @@ static int stmt_evaluate_arg(struct eval_ctx *ctx, struct stmt *stmt,
 
 static int stmt_evaluate_verdict(struct eval_ctx *ctx, struct stmt *stmt)
 {
-       expr_set_context(&ctx->ectx, &verdict_type, 0);
-       if (expr_evaluate(ctx, &stmt->expr) < 0)
+       if (stmt_evaluate_arg(ctx, stmt, &verdict_type, 0, &stmt->expr) < 0)
                return -1;
 
        switch (stmt->expr->ops->type) {
@@ -1625,8 +1624,8 @@ static int stmt_evaluate_redir(struct eval_ctx *ctx, struct stmt *stmt)
 static int stmt_evaluate_queue(struct eval_ctx *ctx, struct stmt *stmt)
 {
        if (stmt->queue.queue != NULL) {
-               expr_set_context(&ctx->ectx, &integer_type, 16);
-               if (expr_evaluate(ctx, &stmt->queue.queue) < 0)
+               if (stmt_evaluate_arg(ctx, stmt, &integer_type, 16,
+                                     &stmt->queue.queue) < 0)
                        return -1;
                if (!expr_is_constant(stmt->queue.queue))
                        return expr_error(ctx->msgs, stmt->queue.queue,