From: Florian Westphal Date: Tue, 3 Apr 2018 11:16:31 +0000 (+0200) Subject: evaluate: handle EXPR_MAPPING X-Git-Tag: v0.8.4~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57cf280d7838a5cae8404402d5d4c4b657f56fcf;p=thirdparty%2Fnftables.git evaluate: handle EXPR_MAPPING 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 --- diff --git a/src/evaluate.c b/src/evaluate.c index 536c13d9..d03bfb06 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -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: