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{}
pmd256 []byte
pmd interface{}
builder gval.Language
keys []*crypto.KeyRing
badHashes []string
badSignatures []string
builder gval.Language
exprs map[string]gval.Evaluable
}
type check interface {
@ -56,6 +58,7 @@ func newProcessor(opts *options) *processor {
noneTLS: map[string]struct{}{},
alreadyChecked: map[string]struct{}{},
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 {
return nil, errors.New("no provider metadata loaded")
}
eval, err := p.builder.NewEvaluable(expr)
if err != nil {
return nil, err
eval := p.exprs[expr]
if eval == nil {
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)
}