1
0
mirror of https://github.com/json-iterator/go.git synced 2025-11-29 22:47:28 +02:00

#159 fix fuzzy decoder, the newIter assigned io.EOF error to original iterator, which stopped further processing

This commit is contained in:
Tao Wen
2017-09-06 00:31:25 +08:00
parent db32ee8c2d
commit 8c7fc7584a
2 changed files with 25 additions and 3 deletions

View File

@@ -7,6 +7,7 @@ import (
"reflect"
"strings"
"unsafe"
"io"
)
const maxUint = ^uint(0)
@@ -206,7 +207,7 @@ func (decoder *fuzzyIntegerDecoder) Decode(ptr unsafe.Pointer, iter *jsoniter.It
defer iter.Pool().ReturnIterator(newIter)
isFloat := strings.IndexByte(str, '.') != -1
decoder.fun(isFloat, ptr, newIter)
if newIter.Error != nil {
if newIter.Error != nil && newIter.Error != io.EOF {
iter.Error = newIter.Error
}
}
@@ -225,7 +226,7 @@ func (decoder *fuzzyFloat32Decoder) Decode(ptr unsafe.Pointer, iter *jsoniter.It
newIter := iter.Pool().BorrowIterator([]byte(str))
defer iter.Pool().ReturnIterator(newIter)
*((*float32)(ptr)) = newIter.ReadFloat32()
if newIter.Error != nil {
if newIter.Error != nil && newIter.Error != io.EOF {
iter.Error = newIter.Error
}
default:
@@ -247,7 +248,7 @@ func (decoder *fuzzyFloat64Decoder) Decode(ptr unsafe.Pointer, iter *jsoniter.It
newIter := iter.Pool().BorrowIterator([]byte(str))
defer iter.Pool().ReturnIterator(newIter)
*((*float64)(ptr)) = newIter.ReadFloat64()
if newIter.Error != nil {
if newIter.Error != nil && newIter.Error != io.EOF {
iter.Error = newIter.Error
}
default: