]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink_delinearize: postprocess expression before range merge
authorPablo Neira Ayuso <pablo@netfilter.org>
Sat, 5 Dec 2015 19:04:22 +0000 (20:04 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 14 Dec 2015 19:32:55 +0000 (20:32 +0100)
Dependency statement go away after postprocess, so we should consider
them for possible range merges.

This problem was uncovered when adding support for sub-byte payload
ranges.

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

index e5cee16375a41ab72a9998a2d29264104fbea0cc..8cbabc34358c859d53b321afd7622465f0e259d5 100644 (file)
@@ -1558,11 +1558,11 @@ static void stmt_expr_postprocess(struct rule_pp_ctx *ctx, struct stmt *prev)
 {
        enum ops op;
 
-       if (prev && ctx->stmt->ops->type == prev->ops->type &&
+       expr_postprocess(ctx, &ctx->stmt->expr);
+
+       if (prev && ctx->stmt && ctx->stmt->ops->type == prev->ops->type &&
            expr_may_merge_range(ctx->stmt->expr, prev->expr, &op))
                expr_postprocess_range(ctx, prev, op);
-
-       expr_postprocess(ctx, &ctx->stmt->expr);
 }
 
 static void rule_parse_postprocess(struct netlink_parse_ctx *ctx, struct rule *rule)