Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(vulnerability builder): fixed and improved DefaultVulnerabilityBuilder #5347

Merged
merged 3 commits into from
May 20, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 48 additions & 32 deletions pkg/engine/vulnerability_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,19 +69,19 @@ var DefaultVulnerabilityBuilder = func(ctx *QueryContext, tracker Tracker,
logWithFields.Error().Msg("Saving result. failed to detect line")
}

searchLineCalc := &searchLineCalculator{
lineNr: -1,
vObj: vObj,
file: file,
detector: detector,
similarityIDLineInfo: similarityIDLineInfo,
linesVulne: linesVulne,
lineNumber := 0
if file.Kind != model.KindHELM {
searchLineCalc := &searchLineCalculator{
lineNr: -1,
vObj: vObj,
file: file,
detector: detector,
similarityIDLineInfo: similarityIDLineInfo,
linesVulne: linesVulne,
}
// calculate search Line if possible (default uses values of search key)
lineNumber, similarityIDLineInfo, linesVulne = calculeSearchLine(searchLineCalc)
}
// calculate search Line if possible (default uses values of search key)
searchLineCalc.calculate()
lineNumber := searchLineCalc.lineNr
similarityIDLineInfo = searchLineCalc.similarityIDLineInfo
linesVulne = searchLineCalc.linesVulne

if linesVulne.Line == -1 {
logWithFields.Warn().Msgf("Failed to detect line, query response %s", searchKey)
Expand All @@ -100,26 +100,7 @@ var DefaultVulnerabilityBuilder = func(ctx *QueryContext, tracker Tracker,

queryID := getStringFromMap("id", DefaultQueryID, overrideKey, vObj, &logWithFields)

var severity model.Severity = model.SeverityInfo
var s *string

if s, err = mapKeyToString(vObj, "severity", false); err == nil {
sev := getSeverity(strings.ToUpper(*s))
if sev == "" {
logWithFields.Warn().Str("severity", *s).Msg("Saving result. invalid severity constant value")
} else {
severity = sev
overrideValue := tryOverride(overrideKey, "severity", vObj)
if overrideValue != nil {
sev = getSeverity(strings.ToUpper(*overrideValue))
if sev != "" {
severity = sev
}
}
}
} else {
logWithFields.Info().Msg("Saving result. failed to detect severity")
}
severity := getResolvedSeverity(vObj, &logWithFields, overrideKey)

issueType := DefaultIssueType
if v := mustMapKeyToString(vObj, "issueType"); v != nil {
Expand Down Expand Up @@ -172,3 +153,38 @@ func getCloudProvider(platform, overrideKey string, vObj map[string]interface{},

return cloudProvider
}

// calculate search Line if possible (default uses values of search key)
func calculeSearchLine(searchLineCalc *searchLineCalculator) (lineNumber int,
similarityIDLineInfo string, linesVulne model.VulnerabilityLines) {
searchLineCalc.calculate()
lineNumber = searchLineCalc.lineNr
similarityIDLineInfo = searchLineCalc.similarityIDLineInfo
linesVulne = searchLineCalc.linesVulne

return lineNumber, similarityIDLineInfo, linesVulne
}

func getResolvedSeverity(vObj map[string]interface{}, logWithFields *zerolog.Logger, overrideKey string) model.Severity {
var severity model.Severity = model.SeverityInfo
s, err := mapKeyToString(vObj, "severity", false)
if err == nil {
sev := getSeverity(strings.ToUpper(*s))
if sev == "" {
logWithFields.Warn().Str("severity", *s).Msg("Saving result. invalid severity constant value")
} else {
severity = sev
overrideValue := tryOverride(overrideKey, "severity", vObj)
if overrideValue != nil {
sev = getSeverity(strings.ToUpper(*overrideValue))
if sev != "" {
severity = sev
}
}
}
} else {
logWithFields.Info().Msg("Saving result. failed to detect severity")
}

return severity
}