mirror of
https://github.com/json-iterator/go.git
synced 2025-03-20 20:54:55 +02:00
#115 check object end
This commit is contained in:
parent
8700644196
commit
f7df62f1b5
@ -154,6 +154,18 @@ func (iter *Iterator) skipWhitespacesWithoutLoadMore() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (iter *Iterator) isObjectEnd() bool {
|
||||
c := iter.nextToken()
|
||||
if c == ',' {
|
||||
return false
|
||||
}
|
||||
if c == '}' {
|
||||
return true
|
||||
}
|
||||
iter.ReportError("isObjectEnd", "object ended prematurely")
|
||||
return true
|
||||
}
|
||||
|
||||
func (iter *Iterator) nextToken() byte {
|
||||
// a variation of skip whitespaces, returning the next non-whitespace token
|
||||
for {
|
||||
|
@ -586,7 +586,7 @@ func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
|
||||
} else {
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -616,7 +616,7 @@ func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -650,7 +650,7 @@ func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -688,7 +688,7 @@ func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -730,7 +730,7 @@ func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -776,7 +776,7 @@ func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -826,7 +826,7 @@ func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -880,7 +880,7 @@ func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -938,7 +938,7 @@ func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -1000,7 +1000,7 @@ func (decoder *tenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
||||
default:
|
||||
iter.Skip()
|
||||
}
|
||||
if iter.nextToken() != ',' {
|
||||
if iter.isObjectEnd() {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
21
jsoniter_invalid_test.go
Normal file
21
jsoniter_invalid_test.go
Normal file
@ -0,0 +1,21 @@
|
||||
package jsoniter
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"github.com/json-iterator/go/require"
|
||||
)
|
||||
|
||||
func Test_missing_object_end(t *testing.T) {
|
||||
should := require.New(t)
|
||||
type TestObject struct {
|
||||
Metric string `json:"metric"`
|
||||
Tags map[string]interface{} `json:"tags"`
|
||||
}
|
||||
obj := TestObject{}
|
||||
should.NotNil(UnmarshalFromString(`{"metric": "sys.777","tags": {"a":"123"}`, &obj))
|
||||
}
|
||||
|
||||
func Test_missing_array_end(t *testing.T) {
|
||||
should := require.New(t)
|
||||
should.NotNil(UnmarshalFromString(`[1,2,3`, &[]int{}))
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user