github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/language/golang/binary/binary.go (about) 1 package binary 2 3 import ( 4 "context" 5 "errors" 6 "os" 7 8 "golang.org/x/xerrors" 9 10 "github.com/aquasecurity/go-dep-parser/pkg/golang/binary" 11 "github.com/devseccon/trivy/pkg/fanal/analyzer" 12 "github.com/devseccon/trivy/pkg/fanal/analyzer/language" 13 "github.com/devseccon/trivy/pkg/fanal/types" 14 "github.com/devseccon/trivy/pkg/fanal/utils" 15 ) 16 17 func init() { 18 analyzer.RegisterAnalyzer(&gobinaryLibraryAnalyzer{}) 19 } 20 21 const version = 1 22 23 type gobinaryLibraryAnalyzer struct{} 24 25 func (a gobinaryLibraryAnalyzer) Analyze(_ context.Context, input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) { 26 p := binary.NewParser() 27 res, err := language.Analyze(types.GoBinary, input.FilePath, input.Content, p) 28 if errors.Is(err, binary.ErrUnrecognizedExe) || errors.Is(err, binary.ErrNonGoBinary) { 29 return nil, nil 30 } else if err != nil { 31 return nil, xerrors.Errorf("go binary (filepath: %s) parse error: %w", input.FilePath, err) 32 } 33 34 return res, nil 35 } 36 37 func (a gobinaryLibraryAnalyzer) Required(_ string, fileInfo os.FileInfo) bool { 38 return utils.IsExecutable(fileInfo) 39 } 40 41 func (a gobinaryLibraryAnalyzer) Type() analyzer.Type { 42 return analyzer.TypeGoBinary 43 } 44 45 func (a gobinaryLibraryAnalyzer) Version() int { 46 return version 47 }