mirror of https://github.com/google/oss-fuzz.git
40 lines
833 B
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
|
|
}
|