From ea0f101f6b0d04614d3e68ca1b502681340ceca6 Mon Sep 17 00:00:00 2001 From: barv Date: Thu, 28 Nov 2024 10:34:33 +0200 Subject: [PATCH 1/2] better error-handling for enrich --- commands/enrich/enrich.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/commands/enrich/enrich.go b/commands/enrich/enrich.go index 236a9f47..325c782c 100644 --- a/commands/enrich/enrich.go +++ b/commands/enrich/enrich.go @@ -73,18 +73,22 @@ func AppendVulnsToJson(cmdResults *results.SecurityCommandResults) error { fileName := getScaScanFileName(cmdResults) fileContent, err := os.ReadFile(fileName) if err != nil { - fmt.Println("Error reading file:", err) + log.Error("Error reading file:") return err } var data map[string]interface{} err = json.Unmarshal(fileContent, &data) if err != nil { - fmt.Println("Error parsing XML:", err) + log.Error("Error parsing XML:") return err } var vulnerabilities []map[string]string - xrayResults := cmdResults.GetScaScansXrayResults()[0] - for _, vuln := range xrayResults.Vulnerabilities { + xrayResults := cmdResults.GetScaScansXrayResults() + if len(xrayResults) == 0 { + log.Error("Failed while getting sca scan from xray") + return err + } + for _, vuln := range xrayResults[0].Vulnerabilities { for component := range vuln.Components { vulnerability := map[string]string{"bom-ref": component, "id": vuln.Cves[0].Id} vulnerabilities = append(vulnerabilities, vulnerability) From accadea84f45519ee3bbb15434075a92029eeea3 Mon Sep 17 00:00:00 2001 From: barv Date: Thu, 28 Nov 2024 12:26:24 +0200 Subject: [PATCH 2/2] better error-handling for enrich --- commands/enrich/enrich.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/commands/enrich/enrich.go b/commands/enrich/enrich.go index 325c782c..f3c5752d 100644 --- a/commands/enrich/enrich.go +++ b/commands/enrich/enrich.go @@ -73,20 +73,19 @@ func AppendVulnsToJson(cmdResults *results.SecurityCommandResults) error { fileName := getScaScanFileName(cmdResults) fileContent, err := os.ReadFile(fileName) if err != nil { - log.Error("Error reading file:") - return err + return fmt.Errorf("error reading file: %s", err.Error()) } var data map[string]interface{} err = json.Unmarshal(fileContent, &data) if err != nil { - log.Error("Error parsing XML:") - return err + return fmt.Errorf("error parsing JSON: %s", err.Error()) } var vulnerabilities []map[string]string xrayResults := cmdResults.GetScaScansXrayResults() if len(xrayResults) == 0 { - log.Error("Failed while getting sca scan from xray") - return err + return fmt.Errorf("failed while getting sca scan from xray: %s", err.Error()) + } else if len(xrayResults) > 1 { + log.Warn("Received %d results, parsing only first result", len(xrayResults)) } for _, vuln := range xrayResults[0].Vulnerabilities { for component := range vuln.Components { @@ -106,9 +105,14 @@ func AppendVulnsToXML(cmdResults *results.SecurityCommandResults) error { return err } destination := result.FindElements("//bom")[0] - xrayResults := cmdResults.GetScaScansXrayResults()[0] + xrayResults := cmdResults.GetScaScansXrayResults() + if len(xrayResults) == 0 { + return fmt.Errorf("failed while getting sca scan from xray: %s", err.Error()) + } else if len(xrayResults) > 1 { + log.Warn("Received %d results, parsing only first result", len(xrayResults)) + } vulns := destination.CreateElement("vulnerabilities") - for _, vuln := range xrayResults.Vulnerabilities { + for _, vuln := range xrayResults[0].Vulnerabilities { for component := range vuln.Components { addVuln := vulns.CreateElement("vulnerability") addVuln.CreateAttr("bom-ref", component)