summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/evaluate.c10
-rw-r--r--tests/shell/testcases/bogons/nft-f/byteorder_conversion_assert2
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