oss-fuzz/projects/cel-go/fuzz_eval.go

40 lines
833 B
Go

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
}