Included bogons assert:
Assertion `!expr_is_constant(*expr) || expr_is_singleton(*expr)' failed
This is because the "foo*" + prefix combination causes expr_evaluate
to replace the binop + string expression with another prefix that
gets allocated while handling "foo*" (wildcard).
This causes expr_evaluate_prefix to build
a prefix -> prefix -> binop chain.
After this, we get:
Error: Right hand side of relational expression ((null)) must be constant
a b ct helper "2.2.2.2.3*1"/80
~~~~~~~~~~^^^^^^^^^^^^^^^^
Error: Binary operation (&) is undefined for prefix expressions
a b ct helper "2.2.2.****02"/80
^^^^^^^^^^^^^^^^^
for those inputs rather than hitting assert() in byteorder_conversion()
later on.
Signed-off-by: Florian Westphal <fw@strlen.de>
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);
--- /dev/null
+a b ct helper "2.2.2.2.3*1"/80
+a b ct helper "2.2.2.****02"/80