From 60a9df5ebc9f3d2fb8c76d33112f6da135827e39 Mon Sep 17 00:00:00 2001 From: Tao Wen Date: Thu, 21 Dec 2017 22:18:28 +0800 Subject: [PATCH] fix #214 report EOF like stdlib --- feature_adapter.go | 3 +++ feature_config.go | 5 +++++ jsoniter_invalid_test.go | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/feature_adapter.go b/feature_adapter.go index 0214b71..b860bf1 100644 --- a/feature_adapter.go +++ b/feature_adapter.go @@ -71,6 +71,9 @@ type Decoder struct { // Decode decode JSON into interface{} func (adapter *Decoder) Decode(obj interface{}) error { + if adapter.iter.Error == io.EOF { + return io.EOF + } adapter.iter.ReadVal(obj) err := adapter.iter.Error if err == io.EOF { diff --git a/feature_config.go b/feature_config.go index 78a2ce1..c08515e 100644 --- a/feature_config.go +++ b/feature_config.go @@ -337,6 +337,11 @@ func (cfg *frozenConfig) NewEncoder(writer io.Writer) *Encoder { func (cfg *frozenConfig) NewDecoder(reader io.Reader) *Decoder { iter := Parse(cfg, reader, 512) + if reader != nil { + if !iter.loadMore() { + iter.Error = io.EOF + } + } return &Decoder{iter} } diff --git a/jsoniter_invalid_test.go b/jsoniter_invalid_test.go index f51b225..8af92c5 100644 --- a/jsoniter_invalid_test.go +++ b/jsoniter_invalid_test.go @@ -3,6 +3,7 @@ package jsoniter import ( "bytes" "encoding/json" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "io" "testing" @@ -184,3 +185,9 @@ func Test_func_pointer_type(t *testing.T) { should.NotNil(Unmarshal([]byte(`{"Obj":{"F": "hello"}}`), &obj)) }) } + +func TestEOF(t *testing.T) { + var s string + err := ConfigCompatibleWithStandardLibrary.NewDecoder(&bytes.Buffer{}).Decode(&s) + assert.Equal(t, io.EOF, err) +}