Avoid null slice being null in JSON
This commit is contained in:
@@ -202,10 +202,12 @@ func scanVulnByCpeNames(cpeNames []string, scannedVulns []models.VulnInfo) ([]mo
|
||||
val.CpeNames = names
|
||||
set[detail.CveID] = val
|
||||
} else {
|
||||
set[detail.CveID] = models.VulnInfo{
|
||||
v := models.VulnInfo{
|
||||
CveID: detail.CveID,
|
||||
CpeNames: []string{name},
|
||||
}
|
||||
v.NilSliceToEmpty()
|
||||
set[detail.CveID] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
glide.lock
generated
2
glide.lock
generated
@@ -70,7 +70,7 @@ imports:
|
||||
- name: github.com/k0kubun/pp
|
||||
version: f5dce6ed0ccf6c350f1679964ff6b61f3d6d2033
|
||||
- name: github.com/kotakanbe/go-cve-dictionary
|
||||
version: c6894c632b69f1879fa49aa2f7b6a6c553061cfb
|
||||
version: bbfdd41e7785a9b7163b5109b10ac2dea8f36d84
|
||||
subpackages:
|
||||
- config
|
||||
- db
|
||||
|
||||
@@ -92,18 +92,17 @@ func (r ScanResult) FillCveDetail() (ScanResult, error) {
|
||||
return r, err
|
||||
}
|
||||
|
||||
icves := config.Conf.Servers[r.ServerName].IgnoreCves
|
||||
|
||||
var known, unknown, ignored CveInfos
|
||||
known, unknown, ignored := CveInfos{}, CveInfos{}, CveInfos{}
|
||||
for _, d := range ds {
|
||||
cinfo := CveInfo{
|
||||
CveDetail: d,
|
||||
VulnInfo: set[d.CveID],
|
||||
}
|
||||
cinfo.NilSliceToEmpty()
|
||||
|
||||
// ignored
|
||||
found := false
|
||||
for _, icve := range icves {
|
||||
for _, icve := range config.Conf.Servers[r.ServerName].IgnoreCves {
|
||||
if icve == d.CveID {
|
||||
ignored = append(ignored, cinfo)
|
||||
found = true
|
||||
@@ -251,6 +250,16 @@ type VulnInfo struct {
|
||||
CpeNames []string
|
||||
}
|
||||
|
||||
// NilSliceToEmpty set nil slice fields to empty slice to avoid null in JSON
|
||||
func (v *VulnInfo) NilSliceToEmpty() {
|
||||
if v.CpeNames == nil {
|
||||
v.CpeNames = []string{}
|
||||
}
|
||||
if v.DistroAdvisories == nil {
|
||||
v.DistroAdvisories = []DistroAdvisory{}
|
||||
}
|
||||
}
|
||||
|
||||
// FindByCveID find by CVEID
|
||||
func (s VulnInfos) FindByCveID(cveID string) (VulnInfo, bool) {
|
||||
for _, p := range s {
|
||||
@@ -312,6 +321,22 @@ type CveInfo struct {
|
||||
VulnInfo
|
||||
}
|
||||
|
||||
// NilSliceToEmpty set nil slice fields to empty slice to avoid null in JSON
|
||||
func (c *CveInfo) NilSliceToEmpty() {
|
||||
if c.CveDetail.Nvd.Cpes == nil {
|
||||
c.CveDetail.Nvd.Cpes = []cve.Cpe{}
|
||||
}
|
||||
if c.CveDetail.Jvn.Cpes == nil {
|
||||
c.CveDetail.Jvn.Cpes = []cve.Cpe{}
|
||||
}
|
||||
if c.CveDetail.Nvd.References == nil {
|
||||
c.CveDetail.Nvd.References = []cve.Reference{}
|
||||
}
|
||||
if c.CveDetail.Jvn.References == nil {
|
||||
c.CveDetail.Jvn.References = []cve.Reference{}
|
||||
}
|
||||
}
|
||||
|
||||
// PackageInfoList is slice of PackageInfo
|
||||
type PackageInfoList []PackageInfo
|
||||
|
||||
|
||||
@@ -287,6 +287,11 @@ func (l *base) convertToModel() models.ScanResult {
|
||||
errs = append(errs, fmt.Sprintf("%s", e))
|
||||
}
|
||||
|
||||
// Avoid null slice being null in JSON
|
||||
for i := range l.VulnInfos {
|
||||
l.VulnInfos[i].NilSliceToEmpty()
|
||||
}
|
||||
|
||||
return models.ScanResult{
|
||||
ServerName: l.ServerInfo.ServerName,
|
||||
ScannedAt: time.Now(),
|
||||
|
||||
Reference in New Issue
Block a user