]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: handle EXPR_MAPPING
authorFlorian Westphal <fw@strlen.de>
Tue, 3 Apr 2018 11:16:31 +0000 (13:16 +0200)
committerFlorian Westphal <fw@strlen.de>
Tue, 3 Apr 2018 13:15:00 +0000 (15:15 +0200)
Needed by followup patch.  EXPR_SET_REF handling is bonkers, it
"works" when using { key : value } because ->key and ->left are aliased
in struct expr to the same location.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/evaluate.c

index 536c13d9928e1770212a517ef420c00b41f6b674..d03bfb067a3be79a57e7fa2d3063fcd6fb03cbc7 100644 (file)
@@ -1421,6 +1421,8 @@ static int binop_can_transfer(struct eval_ctx *ctx,
                if (err <= 0)
                        return err;
                return binop_can_transfer(ctx, left, right->right);
+       case EXPR_MAPPING:
+               return binop_can_transfer(ctx, left, right->left);
        default:
                return 0;
        }
@@ -1448,6 +1450,8 @@ static int binop_transfer_one(struct eval_ctx *ctx,
        int err;
 
        switch ((*right)->ops->type) {
+       case EXPR_MAPPING:
+               return binop_transfer_one(ctx, left, &(*right)->left);
        case EXPR_VALUE:
                break;
        case EXPR_SET_ELEM: