| 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 |
| } |