mirror of
https://github.com/securego/gosec.git
synced 2025-07-03 00:27:05 +02:00
Go modules support for 1.12 (#297)
* support go module * fix implement and uncommented out tests * includes test package * remove test environment go1.10 or older
This commit is contained in:
committed by
Cosmin Cojocar
parent
eaba99df37
commit
85d180848d
@ -3,7 +3,6 @@ package testutils
|
||||
import (
|
||||
"fmt"
|
||||
"go/build"
|
||||
"go/parser"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
@ -11,13 +10,13 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/securego/gosec"
|
||||
"golang.org/x/tools/go/loader"
|
||||
"golang.org/x/tools/go/packages"
|
||||
)
|
||||
|
||||
type buildObj struct {
|
||||
pkg *build.Package
|
||||
config loader.Config
|
||||
program *loader.Program
|
||||
pkg *build.Package
|
||||
config *packages.Config
|
||||
pkgs []*packages.Package
|
||||
}
|
||||
|
||||
// TestPackage is a mock package for testing purposes
|
||||
@ -37,9 +36,7 @@ func NewTestPackage() *TestPackage {
|
||||
goPath = build.Default.GOPATH
|
||||
}
|
||||
|
||||
// Files must exist in $GOPATH
|
||||
sourceDir := path.Join(goPath, "src")
|
||||
workingDir, err := ioutil.TempDir(sourceDir, "gosecs_test")
|
||||
workingDir, err := ioutil.TempDir("", "gosecs_test")
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
@ -84,20 +81,23 @@ func (p *TestPackage) Build() error {
|
||||
}
|
||||
|
||||
var packageFiles []string
|
||||
packageConfig := loader.Config{Build: &build.Default, ParserMode: parser.ParseComments}
|
||||
for _, filename := range basePackage.GoFiles {
|
||||
packageFiles = append(packageFiles, path.Join(p.Path, filename))
|
||||
}
|
||||
|
||||
packageConfig.CreateFromFilenames(basePackage.Name, packageFiles...)
|
||||
program, err := packageConfig.Load()
|
||||
conf := &packages.Config{
|
||||
Mode: packages.LoadSyntax,
|
||||
Tests: false,
|
||||
}
|
||||
pkgs, err := packages.Load(conf, packageFiles...)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
p.build = &buildObj{
|
||||
pkg: basePackage,
|
||||
config: packageConfig,
|
||||
program: program,
|
||||
pkg: basePackage,
|
||||
config: conf,
|
||||
pkgs: pkgs,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -109,18 +109,18 @@ func (p *TestPackage) CreateContext(filename string) *gosec.Context {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, pkg := range p.build.program.Created {
|
||||
for _, file := range pkg.Files {
|
||||
pkgFile := p.build.program.Fset.File(file.Pos()).Name()
|
||||
for _, pkg := range p.build.pkgs {
|
||||
for _, file := range pkg.Syntax {
|
||||
pkgFile := pkg.Fset.File(file.Pos()).Name()
|
||||
strip := fmt.Sprintf("%s%c", p.Path, os.PathSeparator)
|
||||
pkgFile = strings.TrimPrefix(pkgFile, strip)
|
||||
if pkgFile == filename {
|
||||
ctx := &gosec.Context{
|
||||
FileSet: p.build.program.Fset,
|
||||
FileSet: pkg.Fset,
|
||||
Root: file,
|
||||
Config: gosec.NewConfig(),
|
||||
Info: &pkg.Info,
|
||||
Pkg: pkg.Pkg,
|
||||
Info: pkg.TypesInfo,
|
||||
Pkg: pkg.Types,
|
||||
Imports: gosec.NewImportTracker(),
|
||||
}
|
||||
ctx.Imports.TrackPackages(ctx.Pkg.Imports()...)
|
||||
|
Reference in New Issue
Block a user