Selaa lähdekoodia

fix #317, try parse as BigFloat if overflow

Tao Wen 7 vuotta sitten
vanhempi
commit
d05f387f50
2 muutettua tiedostoa jossa 15 lisäystä ja 2 poistoa
  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
 package jsoniter
 
 
-import "fmt"
+import (
+	"fmt"
+	"io"
+)
 
 
 func (iter *Iterator) skipNumber() {
 func (iter *Iterator) skipNumber() {
 	if !iter.trySkipNumber() {
 	if !iter.trySkipNumber() {
 		iter.unreadByte()
 		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{
 	unmarshalCases = append(unmarshalCases, unmarshalCase{
 		ptr:   (*json.RawMessage)(nil),
 		ptr:   (*json.RawMessage)(nil),
 		input: `[1,2,3]`,
 		input: `[1,2,3]`,
+	}, unmarshalCase{
+		ptr:   (*json.RawMessage)(nil),
+		input: `1.122e+250`,
 	})
 	})
 }
 }