You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	fix #195 when decode float as int, report it clearly
This commit is contained in:
		| @@ -168,7 +168,7 @@ func (iter *Iterator) isObjectEnd() bool { | ||||
| 	if c == '}' { | ||||
| 		return true | ||||
| 	} | ||||
| 	iter.ReportError("isObjectEnd", "object ended prematurely, unexpected char " + string([]byte{c})) | ||||
| 	iter.ReportError("isObjectEnd", "object ended prematurely, unexpected char "+string([]byte{c})) | ||||
| 	return true | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -113,6 +113,11 @@ func (iter *Iterator) ReadUint32() (ret uint32) { | ||||
| } | ||||
|  | ||||
| func (iter *Iterator) readUint32(c byte) (ret uint32) { | ||||
| 	defer func() { | ||||
| 		if iter.buf[iter.head] == '.' { | ||||
| 			iter.ReportError("readUint32", "can not decode float as int") | ||||
| 		} | ||||
| 	}() | ||||
| 	ind := intDigits[c] | ||||
| 	if ind == 0 { | ||||
| 		return 0 // single zero | ||||
| @@ -224,6 +229,11 @@ func (iter *Iterator) ReadUint64() uint64 { | ||||
| } | ||||
|  | ||||
| func (iter *Iterator) readUint64(c byte) (ret uint64) { | ||||
| 	defer func() { | ||||
| 		if iter.buf[iter.head] == '.' { | ||||
| 			iter.ReportError("readUint64", "can not decode float as int") | ||||
| 		} | ||||
| 	}() | ||||
| 	ind := intDigits[c] | ||||
| 	if ind == 0 { | ||||
| 		return 0 // single zero | ||||
|   | ||||
| @@ -530,6 +530,12 @@ func Test_null_as_number(t *testing.T) { | ||||
| 	should.Equal("", string(v2)) | ||||
| } | ||||
|  | ||||
| func Test_float_as_int(t *testing.T) { | ||||
| 	should := require.New(t) | ||||
| 	var i int | ||||
| 	should.NotNil(Unmarshal([]byte(`1.1`), &i)) | ||||
| } | ||||
|  | ||||
| func Benchmark_jsoniter_encode_int(b *testing.B) { | ||||
| 	stream := NewStream(ConfigDefault, ioutil.Discard, 64) | ||||
| 	for n := 0; n < b.N; n++ { | ||||
|   | ||||
| @@ -13,10 +13,10 @@ import ( | ||||
| func Test_write_empty_interface_via_placeholder(t *testing.T) { | ||||
| 	fmt.Println(^uint(0) >> 1) | ||||
| 	should := require.New(t) | ||||
| 	m := map[uint32]interface{}{1:"hello"} | ||||
| 	m := map[uint32]interface{}{1: "hello"} | ||||
| 	inf := reflect.ValueOf(m).MapIndex(reflect.ValueOf(uint32(1))).Interface() | ||||
| 	encoder := &placeholderEncoder{ | ||||
| 		cfg: ConfigFastest.(*frozenConfig), | ||||
| 		cfg:      ConfigFastest.(*frozenConfig), | ||||
| 		cacheKey: reflect.TypeOf(m).Elem(), | ||||
| 	} | ||||
| 	stream := ConfigFastest.BorrowStream(nil) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user