Explorar o código

fix #317, try parse as BigFloat if overflow

Tao Wen %!s(int64=7) %!d(string=hai) anos
pai
achega
d05f387f50
Modificáronse 2 ficheiros con 15 adicións e 2 borrados
  1. 12 2
      iter_skip_strict.go
  2. 3 0
      value_tests/raw_message_test.go

+ 12 - 2
iter_skip_strict.go

@@ -2,12 +2,22 @@
 
 package jsoniter
 
-import "fmt"
+import (
+	"fmt"
+	"io"
+)
 
 func (iter *Iterator) skipNumber() {
 	if !iter.trySkipNumber() {
 		iter.unreadByte()
-		iter.ReadFloat32()
+		if iter.Error != nil && iter.Error != io.EOF {
+			return
+		}
+		iter.ReadFloat64()
+		if iter.Error != nil && iter.Error != io.EOF {
+			iter.Error = nil
+			iter.ReadBigFloat()
+		}
 	}
 }
 

+ 3 - 0
value_tests/raw_message_test.go

@@ -17,5 +17,8 @@ func init() {
 	unmarshalCases = append(unmarshalCases, unmarshalCase{
 		ptr:   (*json.RawMessage)(nil),
 		input: `[1,2,3]`,
+	}, unmarshalCase{
+		ptr:   (*json.RawMessage)(nil),
+		input: `1.122e+250`,
 	})
 }