Skip to content

Commit 85eb8a5

Browse files
ccojocargcmurphy
authored andcommitted
Scan the go packages path recursively starting from a root folder
This is replacing the gotool.ImportPaths which seems to have some troubles with Go modules. Signed-off-by: Cosmin Cojocar <[email protected]>
1 parent 8522199 commit 85eb8a5

File tree

4 files changed

+43
-17
lines changed

4 files changed

+43
-17
lines changed

cmd/gosec/main.go

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"sort"
2525
"strings"
2626

27-
"github.com/kisielk/gotool"
2827
"github.com/securego/gosec"
2928
"github.com/securego/gosec/output"
3029
"github.com/securego/gosec/rules"
@@ -147,19 +146,19 @@ func loadConfig(configFile string) (gosec.Config, error) {
147146
func loadRules(include, exclude string) rules.RuleList {
148147
var filters []rules.RuleFilter
149148
if include != "" {
150-
logger.Printf("including rules: %s", include)
149+
logger.Printf("Including rules: %s", include)
151150
including := strings.Split(include, ",")
152151
filters = append(filters, rules.NewRuleFilter(false, including...))
153152
} else {
154-
logger.Println("including rules: default")
153+
logger.Println("Including rules: default")
155154
}
156155

157156
if exclude != "" {
158-
logger.Printf("excluding rules: %s", exclude)
157+
logger.Printf("Excluding rules: %s", exclude)
159158
excluding := strings.Split(exclude, ",")
160159
filters = append(filters, rules.NewRuleFilter(true, excluding...))
161160
} else {
162-
logger.Println("excluding rules: default")
161+
logger.Println("Excluding rules: default")
163162
}
164163
return rules.Generate(filters...)
165164
}
@@ -244,7 +243,7 @@ func main() {
244243
// Load enabled rule definitions
245244
ruleDefinitions := loadRules(*flagRulesInclude, *flagRulesExclude)
246245
if len(ruleDefinitions) == 0 {
247-
logger.Fatal("cannot continue: no rules are configured.")
246+
logger.Fatal("No rules are configured")
248247
}
249248

250249
// Create the analyzer
@@ -253,15 +252,15 @@ func main() {
253252

254253
vendor := regexp.MustCompile(`[\\/]vendor([\\/]|$)`)
255254
var packages []string
256-
// Iterate over packages on the import paths
257-
for _, pkg := range gotool.ImportPaths(flag.Args()) {
258-
// Skip vendor directory
259-
if !*flagScanVendor {
260-
if vendor.MatchString(pkg) {
261-
continue
262-
}
255+
for _, path := range flag.Args() {
256+
pcks, err := gosec.PackagePaths(path, vendor)
257+
if err != nil {
258+
logger.Fatal(err)
263259
}
264-
packages = append(packages, pkg)
260+
packages = append(packages, pcks...)
261+
}
262+
if len(packages) == 0 {
263+
logger.Fatal("No packages found")
265264
}
266265

267266
var buildTags []string

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module github.com/securego/gosec
33
require (
44
github.com/davecgh/go-spew v1.1.1 // indirect
55
github.com/golang/protobuf v1.3.1 // indirect
6-
github.com/kisielk/gotool v1.0.0
76
github.com/kr/pretty v0.1.0 // indirect
87
github.com/lib/pq v1.1.0 // indirect
98
github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg
99
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
1010
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
1111
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
12-
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
13-
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
1412
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
1513
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
1614
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=

helpers.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"os"
2424
"os/user"
2525
"path/filepath"
26+
"regexp"
2627
"runtime"
2728
"strconv"
2829
"strings"
@@ -357,3 +358,32 @@ func FindVarIdentities(n *ast.BinaryExpr, c *Context) ([]*ast.Ident, bool) {
357358
// if nil or error, return false
358359
return nil, false
359360
}
361+
362+
// PackagePaths returns a slice with all packages path at given root directory
363+
func PackagePaths(root string, exclude *regexp.Regexp) ([]string, error) {
364+
if strings.HasSuffix(root, "...") {
365+
root = root[0 : len(root)-3]
366+
} else {
367+
return []string{root}, nil
368+
}
369+
paths := map[string]bool{}
370+
err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
371+
if filepath.Ext(path) == ".go" {
372+
path = filepath.Dir(path)
373+
if exclude != nil && exclude.MatchString(path) {
374+
return nil
375+
}
376+
paths[path] = true
377+
}
378+
return nil
379+
})
380+
if err != nil {
381+
return []string{}, err
382+
}
383+
384+
result := []string{}
385+
for path := range paths {
386+
result = append(result, path)
387+
}
388+
return result, nil
389+
}

0 commit comments

Comments
 (0)