@@ -282,7 +282,7 @@ func (gosec *Analyzer) load(pkgPath string, conf *packages.Config) ([]*packages.
282
282
return pkgs , nil
283
283
}
284
284
285
- // CheckRules runs analysis on the given package
285
+ // CheckRules runs analysis on the given package.
286
286
func (gosec * Analyzer ) CheckRules (pkg * packages.Package ) {
287
287
gosec .logger .Println ("Checking package:" , pkg .Name )
288
288
for _ , file := range pkg .Syntax {
@@ -318,31 +318,14 @@ func (gosec *Analyzer) CheckRules(pkg *packages.Package) {
318
318
}
319
319
}
320
320
321
- // CheckAnalyzers runs analyzers on a given package
321
+ // CheckAnalyzers runs analyzers on a given package.
322
322
func (gosec * Analyzer ) CheckAnalyzers (pkg * packages.Package ) {
323
- ssaPass := & analysis.Pass {
324
- Analyzer : buildssa .Analyzer ,
325
- Fset : pkg .Fset ,
326
- Files : pkg .Syntax ,
327
- OtherFiles : pkg .OtherFiles ,
328
- IgnoredFiles : pkg .IgnoredFiles ,
329
- Pkg : pkg .Types ,
330
- TypesInfo : pkg .TypesInfo ,
331
- TypesSizes : pkg .TypesSizes ,
332
- ResultOf : nil ,
333
- Report : nil ,
334
- ImportObjectFact : nil ,
335
- ExportObjectFact : nil ,
336
- ImportPackageFact : nil ,
337
- ExportPackageFact : nil ,
338
- AllObjectFacts : nil ,
339
- AllPackageFacts : nil ,
340
- }
341
- ssaResult , err := ssaPass .Analyzer .Run (ssaPass )
323
+ ssaResult , err := gosec .buildSSA (pkg )
342
324
if err != nil {
343
- gosec .logger .Printf ("Error running SSA analyser on package %q: %s" , pkg .Name , err )
325
+ gosec .logger .Printf ("Error building the SSA representation of the package %q: %s" , pkg .Name , err )
344
326
return
345
327
}
328
+
346
329
resultMap := map [* analysis.Analyzer ]interface {}{
347
330
buildssa .Analyzer : & analyzers.SSAAnalyzerResult {
348
331
Config : gosec .Config (),
@@ -384,6 +367,35 @@ func (gosec *Analyzer) CheckAnalyzers(pkg *packages.Package) {
384
367
}
385
368
}
386
369
370
+ // buildSSA runs the SSA pass which builds the SSA representation of the package. It handles gracefully any panic.
371
+ func (gosec * Analyzer ) buildSSA (pkg * packages.Package ) (interface {}, error ) {
372
+ defer func () {
373
+ if r := recover (); r != nil {
374
+ gosec .logger .Printf ("Panic when running SSA analyser on package %q: %s" , pkg .Name , r )
375
+ }
376
+ }()
377
+ ssaPass := & analysis.Pass {
378
+ Analyzer : buildssa .Analyzer ,
379
+ Fset : pkg .Fset ,
380
+ Files : pkg .Syntax ,
381
+ OtherFiles : pkg .OtherFiles ,
382
+ IgnoredFiles : pkg .IgnoredFiles ,
383
+ Pkg : pkg .Types ,
384
+ TypesInfo : pkg .TypesInfo ,
385
+ TypesSizes : pkg .TypesSizes ,
386
+ ResultOf : nil ,
387
+ Report : nil ,
388
+ ImportObjectFact : nil ,
389
+ ExportObjectFact : nil ,
390
+ ImportPackageFact : nil ,
391
+ ExportPackageFact : nil ,
392
+ AllObjectFacts : nil ,
393
+ AllPackageFacts : nil ,
394
+ }
395
+
396
+ return ssaPass .Analyzer .Run (ssaPass )
397
+ }
398
+
387
399
func isGeneratedFile (file * ast.File ) bool {
388
400
for _ , comment := range file .Comments {
389
401
for _ , row := range comment .List {
0 commit comments