@@ -23,7 +23,9 @@ func (d *decoder) setArray(rv reflect.Value, values []interface{}) error {
2323 case []interface {}:
2424 n := reflect .New (indirect .Type ().Elem ())
2525 indirect .Set (reflect .Append (indirect , reflect .Indirect (n )))
26- d .setArray (indirect .Index (k ).Addr (), decodedValue )
26+ if err := d .setArray (indirect .Index (k ).Addr (), decodedValue ); err != nil {
27+ return err
28+ }
2729 }
2830 }
2931 return nil
@@ -55,9 +57,13 @@ func (d *decoder) setStruct(rv reflect.Value, values map[string]interface{}) err
5557 case map [string ]interface {}:
5658 n := reflect .New (indirect .FieldByName (field .Name ).Type ())
5759 indirect .FieldByName (field .Name ).Set (reflect .Indirect (n ))
58- d .setStruct (indirect .FieldByName (field .Name ).Addr (), decodedValue )
60+ if err := d .setStruct (indirect .FieldByName (field .Name ).Addr (), decodedValue ); err != nil {
61+ return err
62+ }
5963 case []interface {}:
60- d .setArray (indirect .FieldByName (field .Name ).Addr (), decodedValue )
64+ if err := d .setArray (indirect .FieldByName (field .Name ).Addr (), decodedValue ); err != nil {
65+ return err
66+ }
6167 }
6268 }
6369 }
@@ -86,7 +92,9 @@ func (d *decoder) readString() (string, error) {
8692}
8793
8894func (d * decoder ) readInteger () (string , error ) {
89- d .reader .ReadByte ()
95+ if _ , err := d .reader .ReadByte (); err != nil {
96+ return "" , err
97+ }
9098 value , err := d .reader .readUntil ('e' )
9199 if err != nil {
92100 return "" , err
@@ -96,7 +104,9 @@ func (d *decoder) readInteger() (string, error) {
96104
97105func (d * decoder ) getValueType () (reflect.Kind , error ) {
98106 b , err := d .reader .ReadByte ()
99- defer d .reader .UnreadByte ()
107+ defer func () {
108+ err = d .reader .UnreadByte ()
109+ }()
100110 if err != nil {
101111 return reflect .Invalid , err
102112 }
@@ -114,7 +124,9 @@ func (d *decoder) getValueType() (reflect.Kind, error) {
114124
115125func (d * decoder ) readList () ([]interface {}, error ) {
116126 res := make ([]interface {}, 0 )
117- d .reader .ReadByte ()
127+ if _ , err := d .reader .ReadByte (); err != nil {
128+ return nil , err
129+ }
118130 var v interface {}
119131 for {
120132 e , err := d .reader .ReadByte ()
@@ -124,7 +136,9 @@ func (d *decoder) readList() ([]interface{}, error) {
124136 if e == 'e' {
125137 break
126138 }
127- d .reader .UnreadByte ()
139+ if err = d .reader .UnreadByte (); err != nil {
140+ return nil , err
141+ }
128142 vt , err := d .getValueType ()
129143 if err != nil {
130144 return res , err
@@ -147,6 +161,9 @@ func (d *decoder) readList() ([]interface{}, error) {
147161 }
148162 case reflect .Map :
149163 v , err = d .readDictionary ()
164+ if err != nil {
165+ return res , err
166+ }
150167 }
151168 res = append (res , v )
152169 }
@@ -155,7 +172,9 @@ func (d *decoder) readList() ([]interface{}, error) {
155172
156173func (d * decoder ) readDictionary () (map [string ]interface {}, error ) {
157174 res := make (map [string ]interface {})
158- d .reader .ReadByte ()
175+ if _ , err := d .reader .ReadByte (); err != nil {
176+ return nil , err
177+ }
159178 var v interface {}
160179 for {
161180 s , _ := d .readString ()
@@ -193,7 +212,9 @@ func (d *decoder) readDictionary() (map[string]interface{}, error) {
193212 if e == 'e' {
194213 break
195214 }
196- d .reader .UnreadByte ()
215+ if err := d .reader .UnreadByte (); err != nil {
216+ return nil , err
217+ }
197218 }
198219 return res , nil
199220}
0 commit comments