diff options
| -rw-r--r-- | src/evaluate.c | 10 | ||||
| -rw-r--r-- | tests/shell/testcases/bogons/nft-f/byteorder_conversion_assert | 2 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index ffd3ce62..b984ae4f 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1273,6 +1273,16 @@ static int expr_evaluate_prefix(struct eval_ctx *ctx, struct expr **expr) if (expr_evaluate(ctx, &prefix->prefix) < 0) return -1; base = prefix->prefix; + + /* expr_evaluate may simplify EXPR_AND to another + * prefix expression for inputs like "2.2.2.2.3*1"/80. + * + * Recurse until all the expressions have been simplified. + * This also gets us the error checks for the expression + * chain. + */ + if (base->etype == EXPR_PREFIX) + return expr_evaluate_prefix(ctx, &prefix->prefix); assert(expr_is_constant(base)); prefix->dtype = datatype_get(base->dtype); diff --git a/tests/shell/testcases/bogons/nft-f/byteorder_conversion_assert b/tests/shell/testcases/bogons/nft-f/byteorder_conversion_assert new file mode 100644 index 00000000..26c8914e --- /dev/null +++ b/tests/shell/testcases/bogons/nft-f/byteorder_conversion_assert @@ -0,0 +1,2 @@ +a b ct helper "2.2.2.2.3*1"/80 +a b ct helper "2.2.2.****02"/80 |
