Fix wrong location for G109 (#829)

Before this commit, G109 will report on `strconv.Atoi`.
After this, it will report on the convertion like`int32(a)`.
This commit is contained in:
云微 2022-07-06 12:37:11 +08:00 committed by GitHub
parent 7dd9ddd583
commit 602ced7e71
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 5 deletions

View file

@ -61,7 +61,7 @@ func (i *integerOverflowCheck) Match(node ast.Node, ctx *gosec.Context) (*gosec.
if fun, ok := n.Fun.(*ast.Ident); ok { if fun, ok := n.Fun.(*ast.Ident); ok {
if fun.Name == "int32" || fun.Name == "int16" { if fun.Name == "int32" || fun.Name == "int16" {
if idt, ok := n.Args[0].(*ast.Ident); ok { if idt, ok := n.Args[0].(*ast.Ident); ok {
if n, ok := atoiVarObj[idt.Obj]; ok { if _, ok := atoiVarObj[idt.Obj]; ok {
// Detect int32(v) and int16(v) // Detect int32(v) and int16(v)
return gosec.NewIssue(ctx, n, i.ID(), i.What, i.Severity, i.Confidence), nil return gosec.NewIssue(ctx, n, i.ID(), i.What, i.Severity, i.Confidence), nil
} }

View file

@ -795,7 +795,8 @@ func main() {
} }
value := int32(bigValue) value := int32(bigValue)
fmt.Println(value) fmt.Println(value)
}`}, 1, gosec.NewConfig()}, {[]string{` }`}, 1, gosec.NewConfig()},
{[]string{`
package main package main
import ( import (
@ -811,7 +812,8 @@ func main() {
if int16(bigValue) < 0 { if int16(bigValue) < 0 {
fmt.Println(bigValue) fmt.Println(bigValue)
} }
}`}, 1, gosec.NewConfig()}, {[]string{` }`}, 1, gosec.NewConfig()},
{[]string{`
package main package main
import ( import (
@ -825,7 +827,8 @@ func main() {
panic(err) panic(err)
} }
fmt.Println(bigValue) fmt.Println(bigValue)
}`}, 0, gosec.NewConfig()}, {[]string{` }`}, 0, gosec.NewConfig()},
{[]string{`
package main package main
import ( import (
@ -846,7 +849,8 @@ func test() {
bigValue := 30 bigValue := 30
value := int32(bigValue) value := int32(bigValue)
fmt.Println(value) fmt.Println(value)
}`}, 0, gosec.NewConfig()}, {[]string{` }`}, 0, gosec.NewConfig()},
{[]string{`
package main package main
import ( import (
@ -862,6 +866,17 @@ func main() {
} }
v := int32(value) v := int32(value)
fmt.Println(v) fmt.Println(v)
}`}, 0, gosec.NewConfig()},
{[]string{`
package main
import (
"fmt"
"strconv"
)
func main() {
a, err := strconv.Atoi("a")
b := int32(a) //#nosec G109
fmt.Println(b, err)
}`}, 0, gosec.NewConfig()}, }`}, 0, gosec.NewConfig()},
} }