@@ -74,26 +74,11 @@ func CVEToOSV(cve models.NVDCVE, repos []string, cache *git.RepoTagsCache, direc
7474 }
7575
7676 // If we have ranges, try to resolve them
77- if len (cpeRanges ) > 0 {
78- r , un , sR := conversion .GitVersionsToCommits (cpeRanges , repos , metrics , cache )
79- if len (r ) > 0 {
80- metrics .ResolvedRangesCount += len (r )
81- resolvedRanges = append (resolvedRanges , r ... )
82- metrics .SetOutcome (models .Successful )
83- }
84-
85- if len (un ) > 0 {
86- metrics .UnresolvedRangesCount += len (un )
87- unresolvedRanges = append (unresolvedRanges , un ... )
88- if len (r ) == 0 {
89- metrics .SetOutcome (models .NoCommitRanges )
90- }
91- }
92-
93- for _ , s := range sR {
94- successfulRepos [s ] = true
95- }
96- metrics .VersionSources = append (metrics .VersionSources , models .VersionSourceCPE )
77+ r , un , sR := processRanges (cpeRanges , repos , metrics , cache , models .VersionSourceCPE )
78+ resolvedRanges = append (resolvedRanges , r ... )
79+ unresolvedRanges = append (unresolvedRanges , un ... )
80+ for _ , s := range sR {
81+ successfulRepos [s ] = true
9782 }
9883
9984 // Extract Commits
@@ -116,24 +101,12 @@ func CVEToOSV(cve models.NVDCVE, repos []string, cache *git.RepoTagsCache, direc
116101 if len (textRanges ) > 0 {
117102 metrics .AddNote ("Extracted versions from description: %v" , textRanges )
118103 }
119- r , un , sR := conversion .GitVersionsToCommits (textRanges , repos , metrics , cache )
120- if len (r ) > 0 {
121- metrics .ResolvedRangesCount += len (r )
122- resolvedRanges = append (resolvedRanges , r ... )
123- metrics .SetOutcome (models .Successful )
124- }
125-
126- if len (un ) > 0 {
127- metrics .UnresolvedRangesCount += len (un )
128- unresolvedRanges = append (unresolvedRanges , un ... )
129- if len (r ) == 0 {
130- metrics .SetOutcome (models .NoCommitRanges )
131- }
132- }
104+ r , un , sR := processRanges (textRanges , repos , metrics , cache , models .VersionSourceDescription )
105+ resolvedRanges = append (resolvedRanges , r ... )
106+ unresolvedRanges = append (unresolvedRanges , un ... )
133107 for _ , s := range sR {
134108 successfulRepos [s ] = true
135109 }
136- metrics .VersionSources = append (metrics .VersionSources , models .VersionSourceDescription )
137110 }
138111
139112 if len (resolvedRanges ) == 0 && len (commits ) == 0 {
@@ -501,3 +474,27 @@ func outputFiles(v *vulns.Vulnerability, dir string, vendor string, product stri
501474 metricsFile .Close ()
502475 }
503476}
477+
478+ // processRanges attempts to resolve the given ranges to commits and updates the metrics accordingly.
479+ func processRanges (ranges []* osvschema.Range , repos []string , metrics * models.ConversionMetrics , cache * git.RepoTagsCache , source models.VersionSource ) ([]* osvschema.Range , []* osvschema.Range , []string ) {
480+ if len (ranges ) == 0 {
481+ return nil , nil , nil
482+ }
483+
484+ r , un , sR := conversion .GitVersionsToCommits (ranges , repos , metrics , cache )
485+ if len (r ) > 0 {
486+ metrics .ResolvedRangesCount += len (r )
487+ metrics .SetOutcome (models .Successful )
488+ }
489+
490+ if len (un ) > 0 {
491+ metrics .UnresolvedRangesCount += len (un )
492+ if len (r ) == 0 {
493+ metrics .SetOutcome (models .NoCommitRanges )
494+ }
495+ }
496+
497+ metrics .VersionSources = append (metrics .VersionSources , source )
498+
499+ return r , un , sR
500+ }
0 commit comments