Fix data race in the analyzer

Signed-off-by: Cosmin Cojocar <gcojocar@adobe.com>
This commit is contained in:
Cosmin Cojocar 2023-10-18 15:00:50 +02:00 committed by Cosmin Cojocar
parent c06903addd
commit a2397580b6
2 changed files with 8 additions and 0 deletions

View file

@ -64,6 +64,9 @@ test-coverage: install-test-deps
build: build:
go build -o $(BIN) ./cmd/gosec/ go build -o $(BIN) ./cmd/gosec/
build-race:
go build -race -o $(BIN) ./cmd/gosec/
clean: clean:
rm -rf build vendor dist coverage.txt rm -rf build vendor dist coverage.txt
rm -f release image $(BIN) rm -f release image $(BIN)

View file

@ -184,6 +184,7 @@ type Analyzer struct {
trackSuppressions bool trackSuppressions bool
concurrency int concurrency int
analyzerList []*analysis.Analyzer analyzerList []*analysis.Analyzer
mu sync.Mutex
} }
// NewAnalyzer builds a new analyzer. // NewAnalyzer builds a new analyzer.
@ -324,7 +325,9 @@ func (gosec *Analyzer) load(pkgPath string, conf *packages.Config) ([]*packages.
// step 1/3 create build context. // step 1/3 create build context.
buildD := build.Default buildD := build.Default
// step 2/3: add build tags to get env dependent files into basePackage. // step 2/3: add build tags to get env dependent files into basePackage.
gosec.mu.Lock()
buildD.BuildTags = conf.BuildFlags buildD.BuildTags = conf.BuildFlags
gosec.mu.Unlock()
basePackage, err := buildD.ImportDir(pkgPath, build.ImportComment) basePackage, err := buildD.ImportDir(pkgPath, build.ImportComment)
if err != nil { if err != nil {
return []*packages.Package{}, fmt.Errorf("importing dir %q: %w", pkgPath, err) return []*packages.Package{}, fmt.Errorf("importing dir %q: %w", pkgPath, err)
@ -348,7 +351,9 @@ func (gosec *Analyzer) load(pkgPath string, conf *packages.Config) ([]*packages.
} }
// step 3/3 remove build tags from conf to proceed build correctly. // step 3/3 remove build tags from conf to proceed build correctly.
gosec.mu.Lock()
conf.BuildFlags = nil conf.BuildFlags = nil
defer gosec.mu.Unlock()
pkgs, err := packages.Load(conf, packageFiles...) pkgs, err := packages.Load(conf, packageFiles...)
if err != nil { if err != nil {
return []*packages.Package{}, fmt.Errorf("loading files from package %q: %w", pkgPath, err) return []*packages.Package{}, fmt.Errorf("loading files from package %q: %w", pkgPath, err)