Projects STRLCPY grype Commits c1f67726
🤬
  • ■ ■ ■ ■ ■ ■
    grype/presenter/models/models_helpers.go
    skipped 28 lines
    29 29   return matches, packages, context, NewMetadataMock(), nil, nil
    30 30  }
    31 31   
     32 +func GenerateAnalysisWithIgnoredMatches(t *testing.T, scheme syftSource.Scheme) (match.Matches, []match.IgnoredMatch, []pkg.Package, pkg.Context, vulnerability.MetadataProvider, interface{}, interface{}) {
     33 + t.Helper()
     34 + 
     35 + packages := generatePackages(t)
     36 + matches := generateMatches(t, packages[0], packages[0])
     37 + ignoredMatches := generateIgnoredMatches(t, packages[1])
     38 + context := generateContext(t, scheme)
     39 + 
     40 + return matches, ignoredMatches, packages, context, NewMetadataMock(), nil, nil
     41 +}
     42 + 
    32 43  func SBOMFromPackages(t *testing.T, packages []pkg.Package) *sbom.SBOM {
    33 44   t.Helper()
    34 45   
    skipped 90 lines
    125 136   collection := match.NewMatches(matches...)
    126 137   
    127 138   return collection
     139 +}
     140 + 
     141 +func generateIgnoredMatches(t *testing.T, p pkg.Package) []match.IgnoredMatch {
     142 + t.Helper()
     143 + 
     144 + matches := []match.Match{
     145 + {
     146 + 
     147 + Vulnerability: vulnerability.Vulnerability{
     148 + ID: "CVE-1999-0001",
     149 + Namespace: "source-1",
     150 + },
     151 + Package: p,
     152 + Details: []match.Detail{
     153 + {
     154 + Type: match.ExactDirectMatch,
     155 + Matcher: match.DpkgMatcher,
     156 + SearchedBy: map[string]interface{}{
     157 + "distro": map[string]string{
     158 + "type": "ubuntu",
     159 + "version": "20.04",
     160 + },
     161 + },
     162 + Found: map[string]interface{}{
     163 + "constraint": ">= 20",
     164 + },
     165 + },
     166 + },
     167 + },
     168 + {
     169 + 
     170 + Vulnerability: vulnerability.Vulnerability{
     171 + ID: "CVE-1999-0002",
     172 + Namespace: "source-2",
     173 + },
     174 + Package: p,
     175 + Details: []match.Detail{
     176 + {
     177 + Type: match.ExactDirectMatch,
     178 + Matcher: match.DpkgMatcher,
     179 + SearchedBy: map[string]interface{}{
     180 + "cpe": "somecpe",
     181 + },
     182 + Found: map[string]interface{}{
     183 + "constraint": "somecpe",
     184 + },
     185 + },
     186 + },
     187 + },
     188 + }
     189 + 
     190 + var ignoredMatches []match.IgnoredMatch
     191 + for _, m := range matches {
     192 + ignoredMatches = append(ignoredMatches, match.IgnoredMatch{
     193 + Match: m,
     194 + AppliedIgnoreRules: []match.IgnoreRule{},
     195 + })
     196 + }
     197 + 
     198 + return ignoredMatches
    128 199  }
    129 200   
    130 201  func generatePackages(t *testing.T) []pkg.Package {
    skipped 123 lines
  • ■ ■ ■ ■
    grype/presenter/presenter.go
    skipped 23 lines
    24 24   case jsonFormat:
    25 25   return json.NewPresenter(pb)
    26 26   case tableFormat:
    27  - if c.showSuppressed {
    28  - return table.NewPresenter(pb)
    29  - }
    30  - return table.NewPresenter(pb)
     27 + return table.NewPresenter(pb, c.showSuppressed)
    31 28   
    32 29   // NOTE: cyclonedx is identical to embeddedVEXJSON
    33 30   // The cyclonedx library only provides two BOM formats: JSON and XML
    skipped 23 lines
  • ■ ■ ■ ■ ■ ■
    grype/presenter/table/presenter.go
    skipped 24 lines
    25 25   ignoredMatches []match.IgnoredMatch
    26 26   packages []pkg.Package
    27 27   metadataProvider vulnerability.MetadataProvider
     28 + showSuppressed bool
    28 29  }
    29 30   
    30 31  // NewPresenter is a *Presenter constructor
    31  -func NewPresenter(pb models.PresenterConfig) *Presenter {
     32 +func NewPresenter(pb models.PresenterConfig, showSuppressed bool) *Presenter {
    32 33   return &Presenter{
    33 34   results: pb.Matches,
    34 35   ignoredMatches: pb.IgnoredMatches,
    35 36   packages: pb.Packages,
    36 37   metadataProvider: pb.MetadataProvider,
     38 + showSuppressed: showSuppressed,
    37 39   }
    38 40  }
    39 41   
    skipped 13 lines
    53 55   }
    54 56   
    55 57   // Generate rows for suppressed vulnerabilities
    56  - for _, m := range pres.ignoredMatches {
    57  - row, err := createRow(m.Match, pres.metadataProvider, appendSuppressed)
     58 + if pres.showSuppressed {
     59 + for _, m := range pres.ignoredMatches {
     60 + row, err := createRow(m.Match, pres.metadataProvider, appendSuppressed)
    58 61   
    59  - if err != nil {
    60  - return err
     62 + if err != nil {
     63 + return err
     64 + }
     65 + rows = append(rows, row)
    61 66   }
    62  - rows = append(rows, row)
    63 67   }
    64 68   
    65 69   if len(rows) == 0 {
    skipped 77 lines
  • ■ ■ ■ ■ ■ ■
    grype/presenter/table/presenter_test.go
    skipped 83 lines
    84 84   MetadataProvider: metadataProvider,
    85 85   }
    86 86   
    87  - pres := NewPresenter(pb)
     87 + pres := NewPresenter(pb, false)
    88 88   
    89 89   // run presenter
    90 90   err := pres.Present(&buffer)
    skipped 30 lines
    121 121   MetadataProvider: nil,
    122 122   }
    123 123   
    124  - pres := NewPresenter(pb)
     124 + pres := NewPresenter(pb, false)
    125 125   
    126 126   // run presenter
    127 127   err := pres.Present(&buffer)
    skipped 44 lines
    172 172   
    173 173  }
    174 174   
     175 +func TestHidesIgnoredMatches(t *testing.T) {
     176 + var buffer bytes.Buffer
     177 + matches, ignoredMatches, packages, _, metadataProvider, _, _ := models.GenerateAnalysisWithIgnoredMatches(t, source.ImageScheme)
     178 + 
     179 + pb := models.PresenterConfig{
     180 + Matches: matches,
     181 + IgnoredMatches: ignoredMatches,
     182 + Packages: packages,
     183 + MetadataProvider: metadataProvider,
     184 + }
     185 + 
     186 + pres := NewPresenter(pb, false)
     187 + 
     188 + err := pres.Present(&buffer)
     189 + if err != nil {
     190 + t.Fatal(err)
     191 + }
     192 + actual := buffer.Bytes()
     193 + if *update {
     194 + testutils.UpdateGoldenFileContents(t, actual)
     195 + }
     196 + 
     197 + var expected = testutils.GetGoldenFileContents(t)
     198 + 
     199 + if !bytes.Equal(expected, actual) {
     200 + dmp := diffmatchpatch.New()
     201 + diffs := dmp.DiffMain(string(expected), string(actual), true)
     202 + t.Errorf("mismatched output:\n%s", dmp.DiffPrettyText(diffs))
     203 + }
     204 +}
     205 + 
     206 +func TestDisplaysIgnoredMatches(t *testing.T) {
     207 + var buffer bytes.Buffer
     208 + matches, ignoredMatches, packages, _, metadataProvider, _, _ := models.GenerateAnalysisWithIgnoredMatches(t, source.ImageScheme)
     209 + 
     210 + pb := models.PresenterConfig{
     211 + Matches: matches,
     212 + IgnoredMatches: ignoredMatches,
     213 + Packages: packages,
     214 + MetadataProvider: metadataProvider,
     215 + }
     216 + 
     217 + pres := NewPresenter(pb, true)
     218 + 
     219 + err := pres.Present(&buffer)
     220 + if err != nil {
     221 + t.Fatal(err)
     222 + }
     223 + actual := buffer.Bytes()
     224 + if *update {
     225 + testutils.UpdateGoldenFileContents(t, actual)
     226 + }
     227 + 
     228 + var expected = testutils.GetGoldenFileContents(t)
     229 + 
     230 + if !bytes.Equal(expected, actual) {
     231 + dmp := diffmatchpatch.New()
     232 + diffs := dmp.DiffMain(string(expected), string(actual), true)
     233 + t.Errorf("mismatched output:\n%s", dmp.DiffPrettyText(diffs))
     234 + }
     235 +}
     236 + 
  • ■ ■ ■ ■ ■ ■
    grype/presenter/table/test-fixtures/snapshot/TestDisplaysIgnoredMatches.golden
     1 +NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
     2 +package-1 1.1.1 rpm CVE-1999-0002 Critical
     3 +package-1 1.1.1 the-next-version rpm CVE-1999-0001 Low
     4 +package-2 2.2.2 deb CVE-1999-0001 Low (suppressed)
     5 +package-2 2.2.2 deb CVE-1999-0002 Critical (suppressed)
     6 + 
  • ■ ■ ■ ■ ■ ■
    grype/presenter/table/test-fixtures/snapshot/TestHidesIgnoredMatches.golden
     1 +NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
     2 +package-1 1.1.1 rpm CVE-1999-0002 Critical
     3 +package-1 1.1.1 the-next-version rpm CVE-1999-0001 Low
     4 + 
Please wait...
Page is in error, reload to recover