From 648cc618975ec27df2920cf2fa9841ba76cf21d0 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Thu, 29 Aug 2019 16:09:04 +0200 Subject: src: evaluate: catch invalid 'meta day' values in eval step Signed-off-by: Florian Westphal --- src/evaluate.c | 17 +++++++++++++---- tests/py/any/meta.t | 4 ++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/evaluate.c b/src/evaluate.c index 8d5f5f80..b8bcf486 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1863,11 +1863,20 @@ static int expr_evaluate_meta(struct eval_ctx *ctx, struct expr **exprp) { struct expr *meta = *exprp; - if (ctx->pctx.family != NFPROTO_INET && - meta->flags & EXPR_F_PROTOCOL && - meta->meta.key == NFT_META_NFPROTO) - return expr_error(ctx->msgs, meta, + switch (meta->meta.key) { + case NFT_META_NFPROTO: + if (ctx->pctx.family != NFPROTO_INET && + meta->flags & EXPR_F_PROTOCOL) + return expr_error(ctx->msgs, meta, "meta nfproto is only useful in the inet family"); + break; + case NFT_META_TIME_DAY: + __expr_set_context(&ctx->ectx, meta->dtype, meta->byteorder, + meta->len, 6); + return 0; + default: + break; + } return expr_evaluate_primary(ctx, exprp); } diff --git a/tests/py/any/meta.t b/tests/py/any/meta.t index 5911b74a..86e5d258 100644 --- a/tests/py/any/meta.t +++ b/tests/py/any/meta.t @@ -218,3 +218,7 @@ meta hour "17:00:00" drop;ok;meta hour "17:00" drop meta hour "17:00:01" drop;ok meta hour "00:00" drop;ok meta hour "00:01" drop;ok + +meta time "meh";fail +meta hour "24:00" drop;fail +meta day 7 drop;fail -- cgit v1.2.3