cmd/govulncheck: move filtering logic for vulns
Logic to filter out only vulnerabilities that are called is moved to
cmd/govulncheck.
This change is made to enable printing unaffected modules in the next
CL.
Change-Id: I6a7a33ff4e30f72d776649d2e26ab3fa430fc74a
Reviewed-on: https://go-review.googlesource.com/c/vuln/+/409815
Reviewed-by: Julie Qiu <julieqiu@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Julie Qiu <julieqiu@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/cmd/govulncheck/internal/govulncheck/source.go b/cmd/govulncheck/internal/govulncheck/source.go
index 6bac213..23028b9 100644
--- a/cmd/govulncheck/internal/govulncheck/source.go
+++ b/cmd/govulncheck/internal/govulncheck/source.go
@@ -59,6 +59,8 @@
// Source calls vulncheck.Source on the Go source in pkgs. It returns the result
// with Vulns trimmed to those that are actually called.
+//
+// This function is being used by the Go IDE team.
func Source(ctx context.Context, pkgs []*vulncheck.Package, c client.Client) (*vulncheck.Result, error) {
r, err := vulncheck.Source(ctx, pkgs, &vulncheck.Config{Client: c})
if err != nil {
diff --git a/cmd/govulncheck/main.go b/cmd/govulncheck/main.go
index a96eeba..74c3fc6 100644
--- a/cmd/govulncheck/main.go
+++ b/cmd/govulncheck/main.go
@@ -113,11 +113,13 @@
if err != nil {
die("govulncheck: %v", err)
}
- r, err = govulncheck.Source(ctx, pkgs, dbClient)
+ r, err = vulncheck.Source(ctx, pkgs, &vulncheck.Config{Client: dbClient})
if err != nil {
die("govulncheck: %v", err)
}
+ r.Vulns = filterCalled(r)
}
+
if *jsonFlag {
writeJSON(r)
} else {
@@ -139,6 +141,17 @@
os.Exit(exitCode)
}
+// filterCalled returns vulnerabilities where the symbols are actually called.
+func filterCalled(r *vulncheck.Result) []*vulncheck.Vuln {
+ var vulns []*vulncheck.Vuln
+ for _, v := range r.Vulns {
+ if v.CallSink != 0 {
+ vulns = append(vulns, v)
+ }
+ }
+ return vulns
+}
+
func writeJSON(r *vulncheck.Result) {
b, err := json.MarshalIndent(r, "", "\t")
if err != nil {