| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| "golang.org/x/vuln/vulncheck" |
| var staticContent embed.FS |
| func html(w io.Writer, r *vulncheck.Result, callStacks map[*vulncheck.Vuln][]vulncheck.CallStack, moduleVersions map[string]string, topPackages map[string]bool, vulnGroups [][]*vulncheck.Vuln) error { |
| tmpl, err := template.New("govulncheck.tmpl").Funcs(template.FuncMap{ |
| }).ParseFS(staticContent, "static/govulncheck.tmpl") |
| Stack vulncheck.CallStack |
| for _, vg := range vulnGroups { |
| CurrentVersion: moduleVersions[v0.ModPath], |
| FixedVersion: "v" + latestFixed(v0.OSV.Affected), |
| Reference: fmt.Sprintf("https://pkg.go.dev/vuln/%s", v0.OSV.ID), |
| // Keep first call stack for each vuln. |
| if css := callStacks[v]; len(css) > 0 { |
| vn.Stacks = append(vn.Stacks, callstack{ |
| Summary: summarizeCallStack(css[0], topPackages, v.PkgPath), |
| vulns = append(vulns, vn) |
| return tmpl.Execute(w, vulns) |