Browse Source

codec: fix nested decoding for maps, slices and extensions.

Fix is extending 28147d9923b8aa261e79581a25156153dfd3b85e done for arrays/extensions
to the whole codebase.
Ugorji Nwoke 10 years ago
parent
commit
357a44b2b1
1 changed files with 7 additions and 5 deletions
  1. 7 5
      codec/decode.go

+ 7 - 5
codec/decode.go

@@ -583,14 +583,16 @@ func (f *decFnInfo) kInterfaceNaked() (rvn reflect.Value) {
 		if d.mtid == 0 || d.mtid == mapIntfIntfTypId {
 			l := len(n.ms)
 			n.ms = append(n.ms, nil)
-			d.decode(&n.ms[l])
-			rvn = reflect.ValueOf(&n.ms[l]).Elem()
+			var v2 interface{} = &n.ms[l]
+			d.decode(v2)
+			rvn = reflect.ValueOf(v2).Elem()
 			n.ms = n.ms[:l]
 		} else if d.mtid == mapStrIntfTypId { // for json performance
 			l := len(n.ns)
 			n.ns = append(n.ns, nil)
-			d.decode(&n.ns[l])
-			rvn = reflect.ValueOf(&n.ns[l]).Elem()
+			var v2 interface{} = &n.ns[l]
+			d.decode(v2)
+			rvn = reflect.ValueOf(v2).Elem()
 			n.ns = n.ns[:l]
 		} else {
 			rvn = reflect.New(d.h.MapType).Elem()
@@ -617,8 +619,8 @@ func (f *decFnInfo) kInterfaceNaked() (rvn reflect.Value) {
 			n.is = append(n.is, nil)
 			v2 := &n.is[l]
 			d.decode(v2)
-			n.is = n.is[:l]
 			v = *v2
+			n.is = n.is[:l]
 		}
 		bfn := d.h.getExtForTag(tag)
 		if bfn == nil {