@@ -303,6 +303,74 @@ var _ = Describe("Analyzer", func() {
303
303
Expect (metrics .NumNosec ).Should (Equal (1 ))
304
304
})
305
305
306
+ It ("should not report errors when nosec tag is in front of a line" , func () {
307
+ sample := testutils .SampleCodeG401 [0 ]
308
+ source := sample .Code [0 ]
309
+ analyzer .LoadRules (rules .Generate (false , rules .NewRuleFilter (false , "G401" )).RulesInfo ())
310
+
311
+ nosecPackage := testutils .NewTestPackage ()
312
+ defer nosecPackage .Close ()
313
+ nosecSource := strings .Replace (source , "h := md5.New()" , "//Some description\n //#nosec G401\n h := md5.New()" , 1 )
314
+ nosecPackage .AddFile ("md5.go" , nosecSource )
315
+ err := nosecPackage .Build ()
316
+ Expect (err ).ShouldNot (HaveOccurred ())
317
+ err = analyzer .Process (buildTags , nosecPackage .Path )
318
+ Expect (err ).ShouldNot (HaveOccurred ())
319
+ nosecIssues , _ , _ := analyzer .Report ()
320
+ Expect (nosecIssues ).Should (BeEmpty ())
321
+ })
322
+
323
+ It ("should report errors when nosec tag is not in front of a line" , func () {
324
+ sample := testutils .SampleCodeG401 [0 ]
325
+ source := sample .Code [0 ]
326
+ analyzer .LoadRules (rules .Generate (false , rules .NewRuleFilter (false , "G401" )).RulesInfo ())
327
+
328
+ nosecPackage := testutils .NewTestPackage ()
329
+ defer nosecPackage .Close ()
330
+ nosecSource := strings .Replace (source , "h := md5.New()" , "//Some description\n //Another description #nosec G401\n h := md5.New()" , 1 )
331
+ nosecPackage .AddFile ("md5.go" , nosecSource )
332
+ err := nosecPackage .Build ()
333
+ Expect (err ).ShouldNot (HaveOccurred ())
334
+ err = analyzer .Process (buildTags , nosecPackage .Path )
335
+ Expect (err ).ShouldNot (HaveOccurred ())
336
+ nosecIssues , _ , _ := analyzer .Report ()
337
+ Expect (nosecIssues ).Should (HaveLen (sample .Errors ))
338
+ })
339
+
340
+ It ("should not report errors when rules are in front of nosec tag even rules are wrong" , func () {
341
+ sample := testutils .SampleCodeG401 [0 ]
342
+ source := sample .Code [0 ]
343
+ analyzer .LoadRules (rules .Generate (false , rules .NewRuleFilter (false , "G401" )).RulesInfo ())
344
+
345
+ nosecPackage := testutils .NewTestPackage ()
346
+ defer nosecPackage .Close ()
347
+ nosecSource := strings .Replace (source , "h := md5.New()" , "//G301\n //#nosec\n h := md5.New()" , 1 )
348
+ nosecPackage .AddFile ("md5.go" , nosecSource )
349
+ err := nosecPackage .Build ()
350
+ Expect (err ).ShouldNot (HaveOccurred ())
351
+ err = analyzer .Process (buildTags , nosecPackage .Path )
352
+ Expect (err ).ShouldNot (HaveOccurred ())
353
+ nosecIssues , _ , _ := analyzer .Report ()
354
+ Expect (nosecIssues ).Should (BeEmpty ())
355
+ })
356
+
357
+ It ("should report errors when there are nosec tags after a #nosec WrongRuleList annotation" , func () {
358
+ sample := testutils .SampleCodeG401 [0 ]
359
+ source := sample .Code [0 ]
360
+ analyzer .LoadRules (rules .Generate (false , rules .NewRuleFilter (false , "G401" )).RulesInfo ())
361
+
362
+ nosecPackage := testutils .NewTestPackage ()
363
+ defer nosecPackage .Close ()
364
+ nosecSource := strings .Replace (source , "h := md5.New()" , "//#nosec\n //G301\n //#nosec\n h := md5.New()" , 1 )
365
+ nosecPackage .AddFile ("md5.go" , nosecSource )
366
+ err := nosecPackage .Build ()
367
+ Expect (err ).ShouldNot (HaveOccurred ())
368
+ err = analyzer .Process (buildTags , nosecPackage .Path )
369
+ Expect (err ).ShouldNot (HaveOccurred ())
370
+ nosecIssues , _ , _ := analyzer .Report ()
371
+ Expect (nosecIssues ).Should (HaveLen (sample .Errors ))
372
+ })
373
+
306
374
It ("should be possible to use an alternative nosec tag" , func () {
307
375
// Rule for MD5 weak crypto usage
308
376
sample := testutils .SampleCodeG401 [0 ]
0 commit comments