github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/language/rust/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/rust/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(&rustBinaryLibraryAnalyzer{})
    19  }
    20  
    21  const version = 1
    22  
    23  type rustBinaryLibraryAnalyzer struct{}
    24  
    25  func (a rustBinaryLibraryAnalyzer) Analyze(_ context.Context, input analyzer.AnalysisInput) (*analyzer.AnalysisResult, error) {
    26  	res, err := language.Analyze(types.RustBinary, input.FilePath, input.Content, binary.NewParser())
    27  	if errors.Is(err, binary.ErrUnrecognizedExe) || errors.Is(err, binary.ErrNonRustBinary) {
    28  		return nil, nil
    29  	} else if err != nil {
    30  		return nil, xerrors.Errorf("rust binary parse error: %w", err)
    31  	}
    32  	return res, nil
    33  }
    34  
    35  func (a rustBinaryLibraryAnalyzer) Required(_ string, fileInfo os.FileInfo) bool {
    36  	return utils.IsExecutable(fileInfo)
    37  }
    38  
    39  func (a rustBinaryLibraryAnalyzer) Type() analyzer.Type {
    40  	return analyzer.TypeRustBinary
    41  }
    42  
    43  func (a rustBinaryLibraryAnalyzer) Version() int {
    44  	return version
    45  }