From 4dfba277487a7023ab9f5783302da4a9b5e9bef8 Mon Sep 17 00:00:00 2001 From: "Jiao, Joey" Date: Wed, 6 Nov 2024 13:41:21 +0800 Subject: all: support || operator in syzlang if condition ex. f3 field has logic or operator in if condition: conditional_struct { mask int32 f1 field1 (if[value[mask] & FIELD_FLAG1]) f2 int64 (if[value[mask] & FIELD_FLAG2]) f3 int64 (if[value[mask] == FIELD_FLAG1 || value[mask] == FIELD_FLAG2]) } [packed] --- pkg/ast/testdata/all.txt | 3 +++ pkg/ast/testdata/errors.txt | 8 ++++++++ 2 files changed, 11 insertions(+) (limited to 'pkg/ast/testdata') diff --git a/pkg/ast/testdata/all.txt b/pkg/ast/testdata/all.txt index a274b3eff..d5587c027 100644 --- a/pkg/ast/testdata/all.txt +++ b/pkg/ast/testdata/all.txt @@ -14,6 +14,7 @@ expressions { f1 int8 (if[X & Y == Z]) f2 int8 (if[X & Y & Z == value[X] & A]) f3 int8 (if[X & (A == B) & Z != C]) + f5 int8 (if[value[X] == A || value[X] == B]) } intflags = 1, 2, 3, 4 @@ -29,4 +30,6 @@ condFields { f2 int16 (out, if[val[mask] & SOME_CONST == OTHER_CONST]) f3 int16 (out, if[val[mask] & SOME_CONST & OTHER_CONST == val[mask] & CONST_X]) f4 int16 (out, if[val[flags] & SOME_CONST]) + f5 int16 (out, if[val[flags] == SOME_CONST || val[flags] == OTHER_CONST]) + f6 int16 (out, if[val[flags] == SOME_CONST || val[flags] & OTHER_CONST]) } diff --git a/pkg/ast/testdata/errors.txt b/pkg/ast/testdata/errors.txt index b3d9e7f52..a8a4aa197 100644 --- a/pkg/ast/testdata/errors.txt +++ b/pkg/ast/testdata/errors.txt @@ -75,6 +75,14 @@ sCondFieldsError2 { f5 int16 (out, if[val[mask] & == val[mask]]) ### unexpected ==, expecting int, identifier, string } ### unexpected '}', expecting comment, define, include, resource, identifier +sCondFieldsError3 { + f6 int16 (out, if[val[mask] == SOME_CONST] || [val[mask]]) ### unexpected '[', expecting int, identifier, string +} ### unexpected '}', expecting comment, define, include, resource, identifier + +sCondFieldsError4 { + f7 int16 (out, if[val[mask] == SOME_CONST || val[mask] ==]) ### unexpected ']', expecting int, identifier, string +} ### unexpected '}', expecting comment, define, include, resource, identifier + type mybool8 int8 type net_port proc[1, 2, int16be] type mybool16 ### unexpected '\n', expecting '[', identifier -- cgit mrf-deployment