@@ -19,6 +19,7 @@ package sbom
1919import (
2020 "fmt"
2121 "strings"
22+ "sync"
2223
2324 "github.com/anchore/packageurl-go"
2425 "github.com/docker/docker/client"
@@ -58,13 +59,23 @@ func init() {
5859}
5960
6061func DiffImages (image1 string , image2 string , client client.APIClient , workspace string , apikey string ) error {
61- resultChan1 := make (chan ImageIndexResult )
62- resultChan2 := make (chan ImageIndexResult )
63- go indexImageAsync (image1 , client , resultChan1 )
64- go indexImageAsync (image2 , client , resultChan2 )
65-
66- result1 := <- resultChan1
67- result2 := <- resultChan2
62+ resultChan := make (chan ImageIndexResult , 2 )
63+ var wg sync.WaitGroup
64+ wg .Add (2 )
65+ go indexImageAsync (& wg , image1 , client , resultChan )
66+ go indexImageAsync (& wg , image2 , client , resultChan )
67+ wg .Wait ()
68+ close (resultChan )
69+
70+ var result1 , result2 ImageIndexResult
71+ for result := range resultChan {
72+ switch result .Input {
73+ case image1 :
74+ result1 = result
75+ case image2 :
76+ result2 = result
77+ }
78+ }
6879
6980 diffPackages (result1 , result2 )
7081 diffCves (result1 , result2 )
@@ -154,7 +165,7 @@ func diffPackages(result1, result2 ImageIndexResult) {
154165
155166 t .SetColumnConfigs ([]table.ColumnConfig {
156167 {Name : "Package" , AutoMerge : true },
157- {Name : "Version" , AutoMerge : true },
168+ {Name : "Version" , AutoMerge : true , Align : text . AlignRight },
158169 {Number : 3 , Align : text .AlignCenter , AlignFooter : text .AlignCenter , AlignHeader : text .AlignCenter },
159170 {Number : 4 , Align : text .AlignCenter , AlignFooter : text .AlignCenter , AlignHeader : text .AlignCenter },
160171 })
@@ -239,33 +250,30 @@ func colorizeSeverity(severity string) string {
239250}
240251
241252func toSeverity (cve types.Cve ) string {
242- if cve .Cve != nil {
243- for _ , r := range cve .Cve .References {
244- if r .Source == "atomist" {
245- for _ , s := range r .Scores {
246- if s .Type == "atm_severity" {
247- v := s .Value
248- if v != "SEVERITY_UNSPECIFIED" {
249- return v
250- }
251- }
252- }
253- }
253+ findSeverity := func (adv * types.Advisory ) (string , bool ) {
254+ if adv == nil {
255+ return "" , false
254256 }
255- }
256- if cve .Advisory != nil {
257- for _ , r := range cve .Advisory .References {
257+ for _ , r := range (* adv ).References {
258258 if r .Source == "atomist" {
259259 for _ , s := range r .Scores {
260260 if s .Type == "atm_severity" {
261261 v := s .Value
262262 if v != "SEVERITY_UNSPECIFIED" {
263- return v
263+ return v , true
264264 }
265265 }
266266 }
267267 }
268268 }
269+ return "" , false
270+ }
271+
272+ if severity , ok := findSeverity (cve .Cve ); ok {
273+ return severity
274+ }
275+ if severity , ok := findSeverity (cve .Advisory ); ok {
276+ return severity
269277 }
270278
271279 return "IN TRIAGE"
0 commit comments