Skip to content

Commit 9b13cd5

Browse files
hairyhendersonccojocar
authored andcommittedNov 26, 2024··
Fix G115 false positive when going from parsed uint to larger int
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
1 parent 08ea2a5 commit 9b13cd5

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed
 

‎analyzers/conversion_overflow.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,12 @@ func isStringToIntConversion(instr *ssa.Convert, dstType string) bool {
226226
if err != nil {
227227
return false
228228
}
229-
isSafe := bitSizeValue <= dstInt.size && signed == dstInt.signed
229+
230+
// we're good if:
231+
// - signs match and bit size is <= than destination
232+
// - parsing unsigned and bit size is < than destination
233+
isSafe := (bitSizeValue <= dstInt.size && signed == dstInt.signed) ||
234+
(bitSizeValue < dstInt.size && !signed)
230235
return isSafe
231236
}
232237
}

‎testutils/g115_samples.go

+34
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,40 @@ import (
426426
"strconv"
427427
)
428428
429+
func main() {
430+
var a string = "13"
431+
b, _ := strconv.ParseUint(a, 10, 16)
432+
c := int(b)
433+
fmt.Printf("%d\n", c)
434+
}
435+
`,
436+
}, 0, gosec.NewConfig()},
437+
{[]string{
438+
`
439+
package main
440+
441+
import (
442+
"fmt"
443+
"strconv"
444+
)
445+
446+
func main() {
447+
var a string = "13"
448+
b, _ := strconv.ParseUint(a, 10, 31)
449+
c := int32(b)
450+
fmt.Printf("%d\n", c)
451+
}
452+
`,
453+
}, 0, gosec.NewConfig()},
454+
{[]string{
455+
`
456+
package main
457+
458+
import (
459+
"fmt"
460+
"strconv"
461+
)
462+
429463
func main() {
430464
var a string = "13"
431465
b, _ := strconv.ParseInt(a, 10, 8)

0 commit comments

Comments
 (0)
Please sign in to comment.