1
0
Fork 0
mirror of https://github.com/gocsaf/csaf.git synced 2025-12-22 18:15:42 +01:00

Cache json path expressions.

This commit is contained in:
Sascha L. Teichmann 2021-12-15 13:24:29 +01:00
parent 558408c531
commit 145f9b77a8

View file

@ -37,10 +37,12 @@ type processor struct {
alreadyChecked map[string]struct{} alreadyChecked map[string]struct{}
pmd256 []byte pmd256 []byte
pmd interface{} pmd interface{}
builder gval.Language
keys []*crypto.KeyRing keys []*crypto.KeyRing
badHashes []string badHashes []string
badSignatures []string badSignatures []string
builder gval.Language
exprs map[string]gval.Evaluable
} }
type check interface { type check interface {
@ -56,6 +58,7 @@ func newProcessor(opts *options) *processor {
noneTLS: map[string]struct{}{}, noneTLS: map[string]struct{}{},
alreadyChecked: map[string]struct{}{}, alreadyChecked: map[string]struct{}{},
builder: gval.Full(jsonpath.Language()), builder: gval.Full(jsonpath.Language()),
exprs: map[string]gval.Evaluable{},
} }
} }
@ -107,9 +110,13 @@ func (p *processor) jsonPath(expr string) (interface{}, error) {
if p.pmd == nil { if p.pmd == nil {
return nil, errors.New("no provider metadata loaded") return nil, errors.New("no provider metadata loaded")
} }
eval, err := p.builder.NewEvaluable(expr) eval := p.exprs[expr]
if err != nil { if eval == nil {
return nil, err var err error
if eval, err = p.builder.NewEvaluable(expr); err != nil {
return nil, err
}
p.exprs[expr] = eval
} }
return eval(context.Background(), p.pmd) return eval(context.Background(), p.pmd)
} }