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
|
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 {
|
func (iter *Iterator) nextToken() byte {
|
||||||
// a variation of skip whitespaces, returning the next non-whitespace token
|
// a variation of skip whitespaces, returning the next non-whitespace token
|
||||||
for {
|
for {
|
||||||
|
@ -586,7 +586,7 @@ func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
|
|||||||
} else {
|
} else {
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -616,7 +616,7 @@ func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -650,7 +650,7 @@ func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -688,7 +688,7 @@ func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -730,7 +730,7 @@ func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -776,7 +776,7 @@ func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -826,7 +826,7 @@ func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -880,7 +880,7 @@ func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -938,7 +938,7 @@ func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1000,7 +1000,7 @@ func (decoder *tenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
|
|||||||
default:
|
default:
|
||||||
iter.Skip()
|
iter.Skip()
|
||||||
}
|
}
|
||||||
if iter.nextToken() != ',' {
|
if iter.isObjectEnd() {
|
||||||
break
|
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