Skip to content

Commit 2d1c1a6

Browse files
authored
Track both #nosec and #nosec rulelist for one violation (#741)
1 parent e0f354a commit 2d1c1a6

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

analyzer.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -394,10 +394,13 @@ func (gosec *Analyzer) Visit(n ast.Node) ast.Visitor {
394394

395395
for _, rule := range gosec.ruleset.RegisteredFor(n) {
396396
// Check if all rules are ignored.
397-
suppressions, ignored := ignores[aliasOfAllRules]
398-
if !ignored {
399-
suppressions, ignored = ignores[rule.ID()]
400-
}
397+
generalSuppressions, generalIgnored := ignores[aliasOfAllRules]
398+
// Check if the specific rule is ignored
399+
ruleSuppressions, ruleIgnored := ignores[rule.ID()]
400+
401+
ignored := generalIgnored || ruleIgnored
402+
suppressions := append(generalSuppressions, ruleSuppressions...)
403+
401404
// Track external suppressions.
402405
if gosec.ruleset.IsRuleSuppressed(rule.ID()) {
403406
ignored = true

analyzer_test.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ var _ = Describe("Analyzer", func() {
620620
err = analyzer.Process(buildTags, nosecPackage.Path)
621621
Expect(err).ShouldNot(HaveOccurred())
622622
issues, _, _ := analyzer.Report()
623-
Expect(issues).To(HaveLen(1))
623+
Expect(issues).To(HaveLen(sample.Errors))
624624
Expect(issues[0].Suppressions).To(HaveLen(1))
625625
Expect(issues[0].Suppressions[0].Kind).To(Equal("inSource"))
626626
Expect(issues[0].Suppressions[0].Justification).To(Equal("Justification"))
@@ -640,12 +640,31 @@ var _ = Describe("Analyzer", func() {
640640
err = analyzer.Process(buildTags, nosecPackage.Path)
641641
Expect(err).ShouldNot(HaveOccurred())
642642
issues, _, _ := analyzer.Report()
643-
Expect(issues).To(HaveLen(1))
643+
Expect(issues).To(HaveLen(sample.Errors))
644644
Expect(issues[0].Suppressions).To(HaveLen(1))
645645
Expect(issues[0].Suppressions[0].Kind).To(Equal("inSource"))
646646
Expect(issues[0].Suppressions[0].Justification).To(Equal(""))
647647
})
648648

649+
It("should track multiple suppressions if the violation is suppressed by both #nosec and #nosec RuleList", func() {
650+
sample := testutils.SampleCodeG101[0]
651+
source := sample.Code[0]
652+
analyzer.LoadRules(rules.Generate(false, rules.NewRuleFilter(false, "G101")).RulesInfo())
653+
654+
nosecPackage := testutils.NewTestPackage()
655+
defer nosecPackage.Close()
656+
nosecSource := strings.Replace(source, "}", "} //#nosec G101 -- Justification", 1)
657+
nosecSource = strings.Replace(nosecSource, "func", "//#nosec\nfunc", 1)
658+
nosecPackage.AddFile("pwd.go", nosecSource)
659+
err := nosecPackage.Build()
660+
Expect(err).ShouldNot(HaveOccurred())
661+
err = analyzer.Process(buildTags, nosecPackage.Path)
662+
Expect(err).ShouldNot(HaveOccurred())
663+
issues, _, _ := analyzer.Report()
664+
Expect(issues).To(HaveLen(sample.Errors))
665+
Expect(issues[0].Suppressions).To(HaveLen(2))
666+
})
667+
649668
It("should not report an error if the rule is not included", func() {
650669
sample := testutils.SampleCodeG101[0]
651670
source := sample.Code[0]

0 commit comments

Comments
 (0)