• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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