]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: transfer right shifts to range side
authorPablo Neira Ayuso <pablo@netfilter.org>
Sat, 5 Dec 2015 17:42:40 +0000 (18:42 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 May 2016 20:58:53 +0000 (22:58 +0200)
This provides a generic way to transfer shifts from the left hand side
to the right hand range side of a relational expression when performing
transformations from the evaluation step.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c

index f862cd04342887ac8589d616fa91aef2a8414b66..60bbce1bc49f27831238cd04c12c7b4d1c9b3063 100644 (file)
@@ -1146,6 +1146,18 @@ static int binop_transfer(struct eval_ctx *ctx, struct expr **expr)
                if (binop_transfer_one(ctx, left, &(*expr)->right) < 0)
                        return -1;
                break;
+       case EXPR_RANGE:
+               err = binop_can_transfer(ctx, left, (*expr)->right->left);
+               if (err <= 0)
+                       return err;
+               err = binop_can_transfer(ctx, left, (*expr)->right->right);
+               if (err <= 0)
+                       return err;
+               if (binop_transfer_one(ctx, left, &(*expr)->right->left) < 0)
+                       return -1;
+               if (binop_transfer_one(ctx, left, &(*expr)->right->right) < 0)
+                       return -1;
+               break;
        case EXPR_SET:
                list_for_each_entry(i, &(*expr)->right->expressions, list) {
                        err = binop_can_transfer(ctx, left, i);