aboutsummaryrefslogtreecommitdiff
path: root/projects/cel-go/fuzz_eval.go
diff options
context:
space:
mode:
Diffstat (limited to 'projects/cel-go/fuzz_eval.go')
-rw-r--r--projects/cel-go/fuzz_eval.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/projects/cel-go/fuzz_eval.go b/projects/cel-go/fuzz_eval.go
new file mode 100644
index 000000000..8b2764c60
--- /dev/null
+++ b/projects/cel-go/fuzz_eval.go
@@ -0,0 +1,39 @@
+package cel
+
+import (
+ "github.com/golang/protobuf/proto"
+
+ "github.com/google/cel-go/checker/decls"
+ exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
+)
+
+func FuzzEval(data []byte) int {
+ gen := &FuzzVariables{}
+ err := proto.Unmarshal(data, gen)
+ if err != nil {
+ panic("Failed to unmarshal LPM generated variables")
+ }
+
+ declares := make([]*exprpb.Decl, 0, len(gen.Inputs))
+ for k, _ := range gen.Inputs {
+ declares = append(declares, decls.NewVar(k, decls.String))
+ }
+ env, err := NewEnv(Declarations(declares...))
+ if err != nil {
+ panic("impossible to create env")
+ }
+
+ ast, issues := env.Compile(gen.Expr)
+ if issues != nil && issues.Err() != nil {
+ return 0
+ }
+ prg, err := env.Program(ast)
+ if err != nil {
+ return 0
+ }
+ //fmt.Printf("loltry %#+v\n", gen)
+
+ _, _, err = prg.Eval(gen.Inputs)
+
+ return 1
+}