Skip to content

Commit 3db95a6

Browse files
committed
reduce duplication
1 parent 2e7045a commit 3db95a6

1 file changed

Lines changed: 32 additions & 35 deletions

File tree

vulnfeeds/conversion/nvd/converter.go

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)