diff --git a/cli/main.go b/cli/main.go index 22b563a145c358f3e904149af970f0b4c48f9a30..b21e870f144154d4566f66b45949630b507ef712 100644 --- a/cli/main.go +++ b/cli/main.go @@ -34,6 +34,7 @@ func main() { // output 输出结果 func output(depRoot *model.DepTree, taskInfo report.TaskInfo) { taskInfo.ToolVersion = version + report.Format(depRoot) // 记录依赖 logs.Debug("\n" + depRoot.String()) // 输出结果 diff --git a/util/model/dependency.go b/util/model/dependency.go index 73cb5c0ccacc6b2ec452c7616026ebe08047c5ed..8e766ea28cceddfebb177c88779df77a3958b112 100644 --- a/util/model/dependency.go +++ b/util/model/dependency.go @@ -71,10 +71,14 @@ func NewDependency() Dependency { // String 获取用于展示的Dependency字符串 func (dep Dependency) String() string { + ver := dep.VersionStr + if dep.Version != nil { + ver = dep.Version.Org + } if len(dep.Vendor) == 0 { - return fmt.Sprintf("[%s:%s]", dep.Name, dep.Version.Org) + return fmt.Sprintf("[%s:%s]", dep.Name, ver) } else { - return fmt.Sprintf("[%s:%s:%s]", dep.Vendor, dep.Name, dep.Version.Org) + return fmt.Sprintf("[%s:%s:%s]", dep.Vendor, dep.Name, ver) } } @@ -191,7 +195,11 @@ func (root *DepTree) String() string { if len(vulns) > 0 { vuln = fmt.Sprintf(" %v", vulns) } - res += fmt.Sprintf("%s%s<%s>%s%s\n", strings.Repeat("\t", node.Deep), dep.Dependency, dep.Language, dep.Path[strings.Index(dep.Path, "/")+1:], vuln) + lan := dep.LanguageStr + if lan == "" { + lan = dep.Language.String() + } + res += fmt.Sprintf("%s%s<%s>%s%s\n", strings.Repeat("\t", node.Deep), dep.Dependency, lan, dep.Path[strings.Index(dep.Path, "/")+1:], vuln) for i := len(dep.Children) - 1; i >= 0; i-- { stack.Push(newNode(dep.Children[i], node.Deep+1)) } diff --git a/util/report/cyclonedx.go b/util/report/cyclonedx.go index ef6a91ccdc770febd53c959af204add856dba562..bdadff874b0f9c21e6d06468e4a3853117336145 100644 --- a/util/report/cyclonedx.go +++ b/util/report/cyclonedx.go @@ -9,7 +9,6 @@ import ( ) func buildCycBom(dep *model.DepTree, taskInfo TaskInfo) *cyclonedx.BOM { - format(dep) metadata := cyclonedx.Metadata{} components := []cyclonedx.Component{} dependencies := []cyclonedx.Dependency{} diff --git a/util/report/format.go b/util/report/format.go index f7f70f2737a05454f68f26b7ace77754eebde6ea..52ccabdbe9361faed37f6dd4eb0a9e5a050d7dd4 100644 --- a/util/report/format.go +++ b/util/report/format.go @@ -22,8 +22,8 @@ type TaskInfo struct { ErrorString string `json:"error,omitempty"` } -// format 按照输出内容格式化(不可逆) -func format(dep *model.DepTree) { +// Format 按照输出内容格式化(不可逆) +func Format(dep *model.DepTree) { q := []*model.DepTree{dep} // 保留要导出的数据 for len(q) > 0 { diff --git a/util/report/html.go b/util/report/html.go index 527e079adc272960ea1ed39902301fc9208d9d18..23e483786ca9492fe97ff06dd54c0077cbcddc7e 100644 --- a/util/report/html.go +++ b/util/report/html.go @@ -31,7 +31,6 @@ func Html(dep *model.DepTree, taskInfo TaskInfo) []byte { } vulnMap := map[string]int{} // 遍历所有组件 - format(dep) q := []*model.DepTree{dep} for len(q) > 0 { n := q[0] diff --git a/util/report/json.go b/util/report/json.go index addc702219453384ae33406e82850aaf86bffafc..3e707bd5726e9e70e555655997d6b574f1153832 100644 --- a/util/report/json.go +++ b/util/report/json.go @@ -8,7 +8,6 @@ import ( // Json 获取json格式报告数据 func Json(dep *model.DepTree, taskInfo TaskInfo) []byte { - format(dep) if taskInfo.Error != nil { taskInfo.ErrorString = taskInfo.Error.Error() } diff --git a/util/report/spdx.go b/util/report/spdx.go index beb1ff01aaec79c7d9fefc975387c256d194a53f..71405e6ac96ca0268ae65091572b0bf37fe67419 100644 --- a/util/report/spdx.go +++ b/util/report/spdx.go @@ -21,7 +21,6 @@ func init() { replacer = strings.NewReplacer(replacers...) } func Spdx(dep *model.DepTree, taskInfo TaskInfo) []byte { - format(dep) doc := buildDocument(dep, taskInfo) addPkgToDoc(dep, doc) addRelation(dep, doc) @@ -39,7 +38,6 @@ func Spdx(dep *model.DepTree, taskInfo TaskInfo) []byte { return templateBuffer.Bytes() } func SpdxJson(dep *model.DepTree, taskInfo TaskInfo) []byte { - format(dep) doc := buildDocument(dep, taskInfo) addPkgToDoc(dep, doc) addRelation(dep, doc) @@ -54,7 +52,6 @@ func SpdxJson(dep *model.DepTree, taskInfo TaskInfo) []byte { return res } func SpdxXml(dep *model.DepTree, taskInfo TaskInfo) []byte { - format(dep) doc := buildDocument(dep, taskInfo) addPkgToDoc(dep, doc) addRelation(dep, doc) diff --git a/util/report/swid.go b/util/report/swid.go index cbeb39c32ed888402631f323718e8f30d746ebc1..6661c550928f6d21ad12dc4fc66866222014935b 100644 --- a/util/report/swid.go +++ b/util/report/swid.go @@ -14,7 +14,6 @@ import ( ) func buildSwid(ext string, writer io.Writer, dep *model.DepTree, taskInfo TaskInfo) { - format(dep) w := zip.NewWriter(writer) defer w.Close() q := []*model.DepTree{dep} diff --git a/util/vuln/vuln.go b/util/vuln/vuln.go index 2a178327dc3e0a5620da7e9a97da2808b488377a..032214fb3cf23ccdfafb803a90dd52c41c38a70a 100644 --- a/util/vuln/vuln.go +++ b/util/vuln/vuln.go @@ -44,6 +44,9 @@ func SearchVuln(root *model.DepTree) (err error) { exist := map[string]struct{}{} if len(localVulns) != 0 { for _, vuln := range localVulns[i] { + if vuln.Id == "" { + continue + } if _, ok := exist[vuln.Id]; !ok { exist[vuln.Id] = struct{}{} dep.Vulnerabilities = append(dep.Vulnerabilities, vuln) @@ -52,6 +55,9 @@ func SearchVuln(root *model.DepTree) (err error) { } if len(serverVulns) != 0 { for _, vuln := range serverVulns[i] { + if vuln.Id == "" { + continue + } if _, ok := exist[vuln.Id]; !ok { exist[vuln.Id] = struct{}{} dep.Vulnerabilities = append(dep.Vulnerabilities, vuln)