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:
parent
558408c531
commit
145f9b77a8
1 changed files with 11 additions and 4 deletions
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue