diff options
Diffstat (limited to 'projects/cel-go/fuzz_eval.go')
-rw-r--r-- | projects/cel-go/fuzz_eval.go | 39 |
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 +} |