diff options
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/strconv/int.go')
-rw-r--r-- | vendor/github.com/tdewolff/parse/v2/strconv/int.go | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/vendor/github.com/tdewolff/parse/v2/strconv/int.go b/vendor/github.com/tdewolff/parse/v2/strconv/int.go index e3483bd3a..2f45d1e21 100644 --- a/vendor/github.com/tdewolff/parse/v2/strconv/int.go +++ b/vendor/github.com/tdewolff/parse/v2/strconv/int.go @@ -17,9 +17,10 @@ func ParseInt(b []byte) (int64, int) { n := uint64(0) for i < len(b) { c := b[i] - if n > math.MaxUint64/10 { - return 0, 0 - } else if c >= '0' && c <= '9' { + if '0' <= c && c <= '9' { + if uint64(-math.MinInt64)/10 < n || uint64(-math.MinInt64)-uint64(c-'0') < n*10 { + return 0, 0 + } n *= 10 n += uint64(c - '0') } else { @@ -30,7 +31,7 @@ func ParseInt(b []byte) (int64, int) { if i == start { return 0, 0 } - if !neg && n > uint64(math.MaxInt64) || n > uint64(math.MaxInt64)+1 { + if !neg && uint64(math.MaxInt64) < n { return 0, 0 } else if neg { return -int64(n), i @@ -45,9 +46,10 @@ func ParseUint(b []byte) (uint64, int) { n := uint64(0) for i < len(b) { c := b[i] - if n > math.MaxUint64/10 { - return 0, 0 - } else if c >= '0' && c <= '9' { + if '0' <= c && c <= '9' { + if math.MaxUint64/10 < n || math.MaxUint64-uint64(c-'0') < n*10 { + return 0, 0 + } n *= 10 n += uint64(c - '0') } else { @@ -66,6 +68,10 @@ func LenInt(i int64) int { } i = -i } + return LenUint(uint64(i)) +} + +func LenUint(i uint64) int { switch { case i < 10: return 1 @@ -103,6 +109,8 @@ func LenInt(i int64) int { return 17 case i < 1000000000000000000: return 18 + case i < 10000000000000000000: + return 19 } - return 19 + return 20 } |