1
0
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:
Naoya Yoshizawa
2019-04-25 16:25:32 +09:00
committed by Cosmin Cojocar
parent eaba99df37
commit 85d180848d
5 changed files with 102 additions and 81 deletions

View File

@ -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()...)