1package cel 2 3import ( 4 "github.com/golang/protobuf/proto" 5 6 "github.com/google/cel-go/checker/decls" 7 exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1" 8) 9 10func FuzzEval(data []byte) int { 11 gen := &FuzzVariables{} 12 err := proto.Unmarshal(data, gen) 13 if err != nil { 14 panic("Failed to unmarshal LPM generated variables") 15 } 16 17 declares := make([]*exprpb.Decl, 0, len(gen.Inputs)) 18 for k, _ := range gen.Inputs { 19 declares = append(declares, decls.NewVar(k, decls.String)) 20 } 21 env, err := NewEnv(Declarations(declares...)) 22 if err != nil { 23 panic("impossible to create env") 24 } 25 26 ast, issues := env.Compile(gen.Expr) 27 if issues != nil && issues.Err() != nil { 28 return 0 29 } 30 prg, err := env.Program(ast) 31 if err != nil { 32 return 0 33 } 34 //fmt.Printf("loltry %#+v\n", gen) 35 36 _, _, err = prg.Eval(gen.Inputs) 37 38 return 1 39} 40