Skip to content

Commit

Permalink
Merge pull request #213 from skyjerry/fix-uint64
Browse files Browse the repository at this point in the history
Fix ToUint64 issue with string input exceeding maximum int64
  • Loading branch information
spf13 authored Oct 18, 2024
2 parents 955c718 + 6e9731d commit 487df00
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
6 changes: 6 additions & 0 deletions cast_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,12 @@ func TestToUintE(t *testing.T) {
func TestToUint64E(t *testing.T) {
tests := createNumberTestSteps(uint64(0), uint64(1), uint64(8), uint64(0), uint64(8), uint64(8))

// Maximum value of uint64
tests = append(tests,
testStep{"18446744073709551615", uint64(18446744073709551615), false},
testStep{"18446744073709551616", uint64(0), true},
)

runNumberTest(
qt.New(t),
tests,
Expand Down
4 changes: 2 additions & 2 deletions caste.go
Original file line number Diff line number Diff line change
Expand Up @@ -613,12 +613,12 @@ func ToUint64E(i interface{}) (uint64, error) {

switch s := i.(type) {
case string:
v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0)
v, err := strconv.ParseUint(trimZeroDecimal(s), 0, 0)
if err == nil {
if v < 0 {
return 0, errNegativeNotAllowed
}
return uint64(v), nil
return v, nil
}
return 0, fmt.Errorf("unable to cast %#v of type %T to uint64", i, i)
case json.Number:
Expand Down

0 comments on commit 487df00

Please sign in to comment.