Skip to content

Commit 8302a17

Browse files
committed
fix issue #421
1 parent acfec88 commit 8302a17

File tree

2 files changed

+35
-11
lines changed

2 files changed

+35
-11
lines changed

misc_tests/jsoniter_object_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package misc_tests
22

33
import (
44
"bytes"
5+
"reflect"
56
"testing"
67

78
"github.com/json-iterator/go"
@@ -147,3 +148,26 @@ func Test_unmarshal_into_existing_value(t *testing.T) {
147148
"k": "v",
148149
}, m)
149150
}
151+
152+
// for issue421
153+
func Test_unmarshal_anonymous_struct_invalid(t *testing.T) {
154+
should := require.New(t)
155+
t1 := struct {
156+
Field1 string
157+
}{}
158+
159+
cfg := jsoniter.ConfigCompatibleWithStandardLibrary
160+
err := cfg.UnmarshalFromString(`{"Field1":`, &t1)
161+
should.NotNil(err)
162+
should.NotContains(err.Error(), reflect.TypeOf(t1).String())
163+
164+
type TestObject struct {
165+
Field1 struct {
166+
InnerField1 string
167+
}
168+
}
169+
t2 := TestObject{}
170+
err = cfg.UnmarshalFromString(`{"Field1":{"InnerField1"`, &t2)
171+
should.NotNil(err)
172+
should.NotContains(err.Error(), reflect.TypeOf(t2.Field1).String())
173+
}

reflect_struct_decoder.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
507507
for c = ','; c == ','; c = iter.nextToken() {
508508
decoder.decodeOneField(ptr, iter)
509509
}
510-
if iter.Error != nil && iter.Error != io.EOF {
510+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
511511
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
512512
}
513513
if c != '}' {
@@ -588,7 +588,7 @@ func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
588588
break
589589
}
590590
}
591-
if iter.Error != nil && iter.Error != io.EOF {
591+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
592592
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
593593
}
594594
iter.decrementDepth()
@@ -622,7 +622,7 @@ func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
622622
break
623623
}
624624
}
625-
if iter.Error != nil && iter.Error != io.EOF {
625+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
626626
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
627627
}
628628
iter.decrementDepth()
@@ -660,7 +660,7 @@ func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
660660
break
661661
}
662662
}
663-
if iter.Error != nil && iter.Error != io.EOF {
663+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
664664
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
665665
}
666666
iter.decrementDepth()
@@ -702,7 +702,7 @@ func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
702702
break
703703
}
704704
}
705-
if iter.Error != nil && iter.Error != io.EOF {
705+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
706706
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
707707
}
708708
iter.decrementDepth()
@@ -748,7 +748,7 @@ func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
748748
break
749749
}
750750
}
751-
if iter.Error != nil && iter.Error != io.EOF {
751+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
752752
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
753753
}
754754
iter.decrementDepth()
@@ -798,7 +798,7 @@ func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
798798
break
799799
}
800800
}
801-
if iter.Error != nil && iter.Error != io.EOF {
801+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
802802
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
803803
}
804804
iter.decrementDepth()
@@ -852,7 +852,7 @@ func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
852852
break
853853
}
854854
}
855-
if iter.Error != nil && iter.Error != io.EOF {
855+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
856856
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
857857
}
858858
iter.decrementDepth()
@@ -910,7 +910,7 @@ func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
910910
break
911911
}
912912
}
913-
if iter.Error != nil && iter.Error != io.EOF {
913+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
914914
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
915915
}
916916
iter.decrementDepth()
@@ -972,7 +972,7 @@ func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
972972
break
973973
}
974974
}
975-
if iter.Error != nil && iter.Error != io.EOF {
975+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
976976
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
977977
}
978978
iter.decrementDepth()
@@ -1038,7 +1038,7 @@ func (decoder *tenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
10381038
break
10391039
}
10401040
}
1041-
if iter.Error != nil && iter.Error != io.EOF {
1041+
if iter.Error != nil && iter.Error != io.EOF && len(decoder.typ.Type1().Name()) != 0 {
10421042
iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
10431043
}
10441044
iter.decrementDepth()

0 commit comments

Comments
 (0)