diff --git a/core/chains/evm/assets/wei_test.go b/core/chains/evm/assets/wei_test.go index adbab27d84b..e1181a7a5ec 100644 --- a/core/chains/evm/assets/wei_test.go +++ b/core/chains/evm/assets/wei_test.go @@ -74,10 +74,10 @@ func FuzzWei(f *testing.F) { f.Add("5 micro") f.Fuzz(func(t *testing.T, v string) { if len(v) > 1_000 { - t.Skip() + t.Skipf("too many characters: %d", len(v)) } - if tryParseExp(v) > 4888888 { - t.Skip() + if e := tryParseExp(v); -1000 > e || e > 1000 { + t.Skipf("exponent too large: %d", e) } var w Wei err := w.UnmarshalText([]byte(v)) @@ -100,9 +100,30 @@ func tryParseExp(v string) int64 { if i == -1 { return -1 } - e, err := strconv.ParseInt(v[i+1:], 10, 32) + v = v[i+1:] + if i := strings.IndexFunc(v, func(r rune) bool { + switch { + case r == '-' || r == '+': + return false + case r < '0' || '9' < r: + return true + } + return false + }); i > -1 { + v = v[:i] + } + e, err := strconv.ParseInt(v, 10, 32) if err != nil { return -1 } return e } + +func Test_tryParseExp(t *testing.T) { + got := tryParseExp("000000000E0000000060000000wei") + assert.Equal(t, int64(60000000), got) + got = tryParseExp("0e-80000800") + assert.Equal(t, int64(-80000800), got) + got = tryParseExp("0e+802444440") + assert.Equal(t, int64(802444440), got) +}