Message ID | 20220404121410.188509-15-jeremy@azazel.net |
---|---|
State | Under Review |
Delegated to: | Pablo Neira |
Headers | show |
Series | Extend values assignable to packet marks and payload fields | expand |
On Mon, Apr 04, 2022 at 01:13:52PM +0100, Jeremy Sowden wrote: > In order to be able to set ct and meta marks to values derived from > payload expressions, we need to relax the requirement that the type of > the statement argument must match that of the statement key. Instead, > we require that the base-type of the argument is integer and that the > argument is small enough to fit. LGTM. > Signed-off-by: Jeremy Sowden <jeremy@azazel.net> > --- > src/evaluate.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/src/evaluate.c b/src/evaluate.c > index ee4da5a2b889..f975dd197de3 100644 > --- a/src/evaluate.c > +++ b/src/evaluate.c > @@ -2393,8 +2393,12 @@ static int __stmt_evaluate_arg(struct eval_ctx *ctx, struct stmt *stmt, > "expression has type %s with length %d", > dtype->desc, (*expr)->dtype->desc, > (*expr)->len); > - else if ((*expr)->dtype->type != TYPE_INTEGER && > - !datatype_equal((*expr)->dtype, dtype)) > + > + if ((dtype->type == TYPE_MARK && > + !datatype_equal(datatype_basetype(dtype), datatype_basetype((*expr)->dtype))) || > + (dtype->type != TYPE_MARK && > + (*expr)->dtype->type != TYPE_INTEGER && > + !datatype_equal((*expr)->dtype, dtype))) > return stmt_binary_error(ctx, *expr, stmt, /* verdict vs invalid? */ > "datatype mismatch: expected %s, " > "expression has type %s", > -- > 2.35.1 >
diff --git a/src/evaluate.c b/src/evaluate.c index ee4da5a2b889..f975dd197de3 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -2393,8 +2393,12 @@ static int __stmt_evaluate_arg(struct eval_ctx *ctx, struct stmt *stmt, "expression has type %s with length %d", dtype->desc, (*expr)->dtype->desc, (*expr)->len); - else if ((*expr)->dtype->type != TYPE_INTEGER && - !datatype_equal((*expr)->dtype, dtype)) + + if ((dtype->type == TYPE_MARK && + !datatype_equal(datatype_basetype(dtype), datatype_basetype((*expr)->dtype))) || + (dtype->type != TYPE_MARK && + (*expr)->dtype->type != TYPE_INTEGER && + !datatype_equal((*expr)->dtype, dtype))) return stmt_binary_error(ctx, *expr, stmt, /* verdict vs invalid? */ "datatype mismatch: expected %s, " "expression has type %s",
In order to be able to set ct and meta marks to values derived from payload expressions, we need to relax the requirement that the type of the statement argument must match that of the statement key. Instead, we require that the base-type of the argument is integer and that the argument is small enough to fit. Signed-off-by: Jeremy Sowden <jeremy@azazel.net> --- src/evaluate.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)