Change structure of ScanResult.[]VulnInfo to Map
This commit is contained in:
@@ -164,12 +164,10 @@ func (r ScanResult) FilterByCvssOver() ScanResult {
|
||||
}
|
||||
|
||||
// TODO: Filter by ignore cves???
|
||||
filtered := VulnInfos{}
|
||||
for _, sc := range r.ScannedCves {
|
||||
if config.Conf.CvssScoreOver <= sc.CveContents.CvssV2Score() {
|
||||
filtered = append(filtered, sc)
|
||||
}
|
||||
}
|
||||
filtered := r.ScannedCves.Find(func(v VulnInfo) bool {
|
||||
return config.Conf.CvssScoreOver <= v.CveContents.CvssV2Score()
|
||||
})
|
||||
|
||||
copiedScanResult := r
|
||||
copiedScanResult.ScannedCves = filtered
|
||||
return copiedScanResult
|
||||
@@ -316,61 +314,17 @@ var ChangelogExactMatch = Confidence{95, ChangelogExactMatchStr}
|
||||
var ChangelogLenientMatch = Confidence{50, ChangelogLenientMatchStr}
|
||||
|
||||
// VulnInfos is VulnInfo list, getter/setter, sortable methods.
|
||||
type VulnInfos []VulnInfo
|
||||
type VulnInfos map[string]VulnInfo
|
||||
|
||||
// Find elements that matches the function passed in argument
|
||||
func (v *VulnInfos) Find(f func(VulnInfo) bool) (filtered VulnInfos) {
|
||||
for _, vv := range *v {
|
||||
func (v VulnInfos) Find(f func(VulnInfo) bool) VulnInfos {
|
||||
filtered := VulnInfos{}
|
||||
for _, vv := range v {
|
||||
if f(vv) {
|
||||
filtered = append(filtered, vv)
|
||||
filtered[vv.CveID] = vv
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Get VulnInfo by cveID
|
||||
func (v *VulnInfos) Get(cveID string) (VulnInfo, bool) {
|
||||
for _, vv := range *v {
|
||||
if vv.CveID == cveID {
|
||||
return vv, true
|
||||
}
|
||||
}
|
||||
return VulnInfo{}, false
|
||||
}
|
||||
|
||||
// Delete by cveID
|
||||
func (v *VulnInfos) Delete(cveID string) {
|
||||
vInfos := *v
|
||||
for i, vv := range vInfos {
|
||||
if vv.CveID == cveID {
|
||||
*v = append(vInfos[:i], vInfos[i+1:]...)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Insert VulnInfo
|
||||
func (v *VulnInfos) Insert(vinfo VulnInfo) {
|
||||
*v = append(*v, vinfo)
|
||||
}
|
||||
|
||||
// Update VulnInfo
|
||||
func (v *VulnInfos) Update(vInfo VulnInfo) (ok bool) {
|
||||
for i, vv := range *v {
|
||||
if vv.CveID == vInfo.CveID {
|
||||
(*v)[i] = vInfo
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Upsert cveInfo
|
||||
func (v *VulnInfos) Upsert(vInfo VulnInfo) {
|
||||
ok := v.Update(vInfo)
|
||||
if !ok {
|
||||
v.Insert(vInfo)
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
|
||||
// VulnInfo holds a vulnerability information and unsecure packages
|
||||
|
||||
@@ -58,46 +58,3 @@ func TestMergeNewVersion(t *testing.T) {
|
||||
t.Errorf("expected %s, actual %s", e, a)
|
||||
}
|
||||
}
|
||||
func TestVulnInfosSetGet(t *testing.T) {
|
||||
var test = struct {
|
||||
in []string
|
||||
out []string
|
||||
}{
|
||||
[]string{
|
||||
"CVE1",
|
||||
"CVE2",
|
||||
"CVE3",
|
||||
"CVE1",
|
||||
"CVE1",
|
||||
"CVE2",
|
||||
"CVE3",
|
||||
},
|
||||
[]string{
|
||||
"CVE1",
|
||||
"CVE2",
|
||||
"CVE3",
|
||||
},
|
||||
}
|
||||
|
||||
// var ps packageCveInfos
|
||||
var ps VulnInfos
|
||||
for _, cid := range test.in {
|
||||
ps.Upsert(VulnInfo{CveID: cid})
|
||||
}
|
||||
|
||||
if len(test.out) != len(ps) {
|
||||
t.Errorf("length: expected %d, actual %d", len(test.out), len(ps))
|
||||
}
|
||||
|
||||
for i, expectedCid := range test.out {
|
||||
if expectedCid != ps[i].CveID {
|
||||
t.Errorf("expected %s, actual %s", expectedCid, ps[i].CveID)
|
||||
}
|
||||
}
|
||||
for _, cid := range test.in {
|
||||
p, _ := ps.Get(cid)
|
||||
if p.CveID != cid {
|
||||
t.Errorf("expected %s, actual %s", cid, p.CveID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user