Skip to content

Commit 440001b

Browse files
committed
feat: support printing the next fixed version
1 parent 7180ccf commit 440001b

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

internal/reporter/report.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ func (r Report) formatLineByLine() string {
7272
color.CyanString("%s:", vulnerability.ID),
7373
vulnerability.Describe(),
7474
))
75+
76+
nextFix := vulnerability.NextFixedVersion(pkg.PackageDetails)
77+
78+
if nextFix != "" {
79+
lines[len(lines)-1] += fmt.Sprintf(" (%s)", nextFix)
80+
}
7581
}
7682
}
7783

pkg/database/osv.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,3 +291,38 @@ func (osv *OSV) IsAffected(pkg internal.PackageDetails) bool {
291291

292292
return false
293293
}
294+
295+
func (osv *OSV) NextFixedVersion(pkg internal.PackageDetails) string {
296+
if pkg.Version == "" {
297+
return ""
298+
}
299+
300+
parsed := semantic.MustParse(pkg.Version, string(pkg.Ecosystem))
301+
302+
for _, affected := range osv.Affected {
303+
if affected.Package.Ecosystem == pkg.Ecosystem &&
304+
affected.Package.NormalizedName() == pkg.Name {
305+
if len(affected.Ranges) == 0 && len(affected.Versions) == 0 {
306+
_, _ = fmt.Fprintf(
307+
os.Stderr,
308+
"%s does not have any ranges or versions - this is probably a mistake!\n",
309+
osv.ID,
310+
)
311+
312+
continue
313+
}
314+
315+
for _, rang := range affected.Ranges {
316+
for _, event := range rang.Events {
317+
if event.Fixed != "" {
318+
if r, _ := parsed.CompareStr(event.Fixed); r == -1 {
319+
return event.Fixed
320+
}
321+
}
322+
}
323+
}
324+
}
325+
}
326+
327+
return ""
328+
}

0 commit comments

Comments
 (0)