Skip to content

Commit bb9d5d9

Browse files
committed
fix(detector/oval): be strict about whether to use binary pkgs or source pkgs
1 parent 155c287 commit bb9d5d9

File tree

1 file changed

+71
-46
lines changed

1 file changed

+71
-46
lines changed

oval/util.go

Lines changed: 71 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,15 @@ func getDefsByPackNameViaHTTP(r *models.ScanResult, url string) (relatedDefs ova
136136
}
137137
}
138138

139-
nReq := len(r.Packages) + len(r.SrcPackages)
139+
nReq := func() int {
140+
switch ovalFamily {
141+
case constant.Alpine:
142+
return len(r.SrcPackages)
143+
default:
144+
return len(r.Packages)
145+
}
146+
}()
147+
140148
reqChan := make(chan request, nReq)
141149
resChan := make(chan response, nReq)
142150
errChan := make(chan error, nReq)
@@ -145,28 +153,34 @@ func getDefsByPackNameViaHTTP(r *models.ScanResult, url string) (relatedDefs ova
145153
defer close(errChan)
146154

147155
go func() {
148-
for _, pack := range r.Packages {
149-
req := request{
150-
packName: pack.Name,
151-
versionRelease: pack.FormatVer(),
152-
newVersionRelease: pack.FormatNewVer(),
153-
isSrcPack: false,
154-
arch: pack.Arch,
155-
repository: pack.Repository,
156-
modularityLabel: pack.ModularityLabel,
157-
}
158-
if ovalFamily == constant.Amazon && ovalRelease == "2" && req.repository == "" {
159-
req.repository = "amzn2-core"
156+
switch ovalFamily {
157+
case constant.Alpine:
158+
for _, pack := range r.SrcPackages {
159+
reqChan <- request{
160+
packName: pack.Name,
161+
binaryPackNames: pack.BinaryNames,
162+
versionRelease: pack.Version,
163+
isSrcPack: true,
164+
// arch: pack.Arch,
165+
}
160166
}
161-
reqChan <- req
162-
}
163-
for _, pack := range r.SrcPackages {
164-
reqChan <- request{
165-
packName: pack.Name,
166-
binaryPackNames: pack.BinaryNames,
167-
versionRelease: pack.Version,
168-
isSrcPack: true,
169-
// arch: pack.Arch,
167+
default:
168+
for _, pack := range r.Packages {
169+
req := request{
170+
packName: pack.Name,
171+
versionRelease: pack.FormatVer(),
172+
newVersionRelease: pack.FormatNewVer(),
173+
isSrcPack: false,
174+
arch: pack.Arch,
175+
repository: func() string {
176+
if ovalFamily == constant.Amazon && ovalRelease == "2" && pack.Repository == "" {
177+
return "amzn2-core"
178+
}
179+
return pack.Repository
180+
}(),
181+
modularityLabel: pack.ModularityLabel,
182+
}
183+
reqChan <- req
170184
}
171185
}
172186
}()
@@ -313,31 +327,42 @@ func getDefsByPackNameFromOvalDB(r *models.ScanResult, driver ovaldb.DB) (relate
313327
}
314328
}
315329

316-
requests := []request{}
317-
for _, pack := range r.Packages {
318-
req := request{
319-
packName: pack.Name,
320-
versionRelease: pack.FormatVer(),
321-
newVersionRelease: pack.FormatNewVer(),
322-
arch: pack.Arch,
323-
repository: pack.Repository,
324-
modularityLabel: pack.ModularityLabel,
325-
isSrcPack: false,
326-
}
327-
if ovalFamily == constant.Amazon && ovalRelease == "2" && req.repository == "" {
328-
req.repository = "amzn2-core"
330+
requests := func() []request {
331+
switch ovalFamily {
332+
case constant.Alpine:
333+
rs := make([]request, 0, len(r.SrcPackages))
334+
for _, pack := range r.SrcPackages {
335+
rs = append(rs, request{
336+
packName: pack.Name,
337+
binaryPackNames: pack.BinaryNames,
338+
versionRelease: pack.Version,
339+
arch: pack.Arch,
340+
isSrcPack: true,
341+
})
342+
}
343+
return rs
344+
default:
345+
rs := make([]request, 0, len(r.Packages))
346+
for _, pack := range r.Packages {
347+
rs = append(rs, request{
348+
packName: pack.Name,
349+
versionRelease: pack.FormatVer(),
350+
newVersionRelease: pack.FormatNewVer(),
351+
arch: pack.Arch,
352+
repository: func() string {
353+
if ovalFamily == constant.Amazon && ovalRelease == "2" && pack.Repository == "" {
354+
return "amzn2-core"
355+
}
356+
return pack.Repository
357+
}(),
358+
modularityLabel: pack.ModularityLabel,
359+
isSrcPack: false,
360+
})
361+
}
362+
return rs
329363
}
330-
requests = append(requests, req)
331-
}
332-
for _, pack := range r.SrcPackages {
333-
requests = append(requests, request{
334-
packName: pack.Name,
335-
binaryPackNames: pack.BinaryNames,
336-
versionRelease: pack.Version,
337-
arch: pack.Arch,
338-
isSrcPack: true,
339-
})
340-
}
364+
}()
365+
341366
for _, req := range requests {
342367
definitions, err := driver.GetByPackName(ovalFamily, ovalRelease, req.packName, req.arch)
343368
if err != nil {

0 commit comments

Comments
 (0)