fix: parsing of the Go version (#844)

* fix: parsing of the Go version

* fix: convert pseudo directive to comment
This commit is contained in:
Ludovic Fernandez 2022-08-08 09:28:41 +02:00 committed by GitHub
parent 0c8e63ed86
commit 4e68fb5b15
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 14 deletions

View file

@ -71,7 +71,7 @@ func (a *arrayFlags) Set(value string) error {
} }
var ( var (
//#nosec flag // #nosec flag
flagIgnoreNoSec = flag.Bool("nosec", false, "Ignores #nosec comments when set") flagIgnoreNoSec = flag.Bool("nosec", false, "Ignores #nosec comments when set")
// show ignored // show ignored
@ -80,7 +80,7 @@ var (
// format output // format output
flagFormat = flag.String("fmt", "text", "Set output format. Valid options are: json, yaml, csv, junit-xml, html, sonarqube, golint, sarif or text") flagFormat = flag.String("fmt", "text", "Set output format. Valid options are: json, yaml, csv, junit-xml, html, sonarqube, golint, sarif or text")
//#nosec alternative tag // #nosec alternative tag
flagAlternativeNoSec = flag.String("nosec-tag", "", "Set an alternative string for #nosec. Some examples: #dontanalyze, #falsepositive") flagAlternativeNoSec = flag.String("nosec-tag", "", "Set an alternative string for #nosec. Some examples: #dontanalyze, #falsepositive")
// output file // output file
@ -148,7 +148,7 @@ var (
logger *log.Logger logger *log.Logger
) )
//#nosec // #nosec
func usage() { func usage() {
usageText := fmt.Sprintf(usageText, Version, GitTag, BuildDate) usageText := fmt.Sprintf(usageText, Version, GitTag, BuildDate)
fmt.Fprintln(os.Stderr, usageText) fmt.Fprintln(os.Stderr, usageText)
@ -173,12 +173,12 @@ func usage() {
func loadConfig(configFile string) (gosec.Config, error) { func loadConfig(configFile string) (gosec.Config, error) {
config := gosec.NewConfig() config := gosec.NewConfig()
if configFile != "" { if configFile != "" {
//#nosec // #nosec
file, err := os.Open(configFile) file, err := os.Open(configFile)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer file.Close() //#nosec G307 defer file.Close() // #nosec G307
if _, err := config.ReadFrom(file); err != nil { if _, err := config.ReadFrom(file); err != nil {
return nil, err return nil, err
} }
@ -253,11 +253,11 @@ func printReport(format string, color bool, rootPaths []string, reportInfo *gose
} }
func saveReport(filename, format string, rootPaths []string, reportInfo *gosec.ReportInfo) error { func saveReport(filename, format string, rootPaths []string, reportInfo *gosec.ReportInfo) error {
outfile, err := os.Create(filename) //#nosec G304 outfile, err := os.Create(filename) // #nosec G304
if err != nil { if err != nil {
return err return err
} }
defer outfile.Close() //#nosec G307 defer outfile.Close() // #nosec G307
err = report.CreateReport(outfile, format, false, rootPaths, reportInfo) err = report.CreateReport(outfile, format, false, rootPaths, reportInfo)
if err != nil { if err != nil {
return err return err
@ -337,7 +337,7 @@ func main() {
// Ensure at least one file was specified or that the recursive -r flag was set. // Ensure at least one file was specified or that the recursive -r flag was set.
if flag.NArg() == 0 && !*flagRecursive { if flag.NArg() == 0 && !*flagRecursive {
fmt.Fprintf(os.Stderr, "\nError: FILE [FILE...] or './...' or -r expected\n") //#nosec fmt.Fprintf(os.Stderr, "\nError: FILE [FILE...] or './...' or -r expected\n") // #nosec
flag.Usage() flag.Usage()
os.Exit(1) os.Exit(1)
} }
@ -460,7 +460,7 @@ func main() {
} }
// Finalize logging // Finalize logging
logWriter.Close() //#nosec logWriter.Close() // #nosec
exit(issues, errors, *flagNoFail) exit(issues, errors, *flagNoFail)
} }

View file

@ -34,8 +34,8 @@ import (
// initialization only imports. // initialization only imports.
// //
// Usage: // Usage:
// node, matched := MatchCallByPackage(n, ctx, "math/rand", "Read")
// //
// node, matched := MatchCallByPackage(n, ctx, "math/rand", "Read")
func MatchCallByPackage(n ast.Node, c *Context, pkg string, names ...string) (*ast.CallExpr, bool) { func MatchCallByPackage(n ast.Node, c *Context, pkg string, names ...string) (*ast.CallExpr, bool) {
importedName, found := GetImportedName(pkg, c) importedName, found := GetImportedName(pkg, c)
if !found { if !found {
@ -474,9 +474,25 @@ func RootPath(root string) (string, error) {
// GoVersion returns parsed version of Go from runtime // GoVersion returns parsed version of Go from runtime
func GoVersion() (int, int, int) { func GoVersion() (int, int, int) {
versionParts := strings.Split(runtime.Version(), ".") return parseGoVersion(runtime.Version())
major, _ := strconv.Atoi(versionParts[0][2:]) }
minor, _ := strconv.Atoi(versionParts[1])
build, _ := strconv.Atoi(versionParts[2]) // parseGoVersion parses Go version.
// example:
// - go1.19rc2
// - go1.19beta2
// - go1.19.4
// - go1.19
func parseGoVersion(version string) (int, int, int) {
exp := regexp.MustCompile(`go(\d+).(\d+)(?:.(\d+))?.*`)
parts := exp.FindStringSubmatch(version)
if len(parts) <= 1 {
return 0, 0, 0
}
major, _ := strconv.Atoi(parts[1])
minor, _ := strconv.Atoi(parts[2])
build, _ := strconv.Atoi(parts[3])
return major, minor, build return major, minor, build
} }