aboutsummaryrefslogtreecommitdiffstats
path: root/prog/expr.go
diff options
context:
space:
mode:
authorJiao, Joey <quic_jiangenj@quicinc.com>2024-11-06 13:41:21 +0800
committerAleksandr Nogikh <nogikh@google.com>2024-11-13 11:16:59 +0000
commit4dfba277487a7023ab9f5783302da4a9b5e9bef8 (patch)
tree72c5a0b86f7e38922230b4421ebe50c5654e5cdc /prog/expr.go
parentbb3f84250514d5990939e57b5d1ff8badc566033 (diff)
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]
Diffstat (limited to 'prog/expr.go')
-rw-r--r--prog/expr.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/prog/expr.go b/prog/expr.go
index e9446ab2c..87fb056a9 100644
--- a/prog/expr.go
+++ b/prog/expr.go
@@ -30,6 +30,11 @@ func (bo *BinaryExpression) Evaluate(finder ArgFinder) (uint64, bool) {
return 0, true
case OperatorBinaryAnd:
return left & right, true
+ case OperatorOr:
+ if left != 0 || right != 0 {
+ return 1, true
+ }
+ return 0, true
}
panic(fmt.Sprintf("unknown operator %q", bo.Operator))
}