]> Cypherpunks repositories - gostls13.git/commitdiff
gob: fix bug sending zero-length top-level slices and maps
authorRob Pike <r@golang.org>
Thu, 9 Dec 2010 16:01:32 +0000 (11:01 -0500)
committerRob Pike <r@golang.org>
Thu, 9 Dec 2010 16:01:32 +0000 (11:01 -0500)
Fixes #1278.

R=rsc
CC=golang-dev
https://golang.org/cl/3434046

src/pkg/gob/encode.go

index 73938668020c0689c4ee679b8c6cd48be24de52c..db1f136f10e54fada4aada006701ed047112ff90 100644 (file)
@@ -473,7 +473,7 @@ func (enc *Encoder) encOpFor(rt reflect.Type) (encOp, int) {
                        elemOp, indir := enc.encOpFor(t.Elem())
                        op = func(i *encInstr, state *encoderState, p unsafe.Pointer) {
                                slice := (*reflect.SliceHeader)(p)
-                               if slice.Len == 0 {
+                               if !state.sendZero && slice.Len == 0 {
                                        return
                                }
                                state.update(i)
@@ -495,7 +495,7 @@ func (enc *Encoder) encOpFor(rt reflect.Type) (encOp, int) {
                                // the iteration.
                                v := reflect.NewValue(unsafe.Unreflect(t, unsafe.Pointer((p))))
                                mv := reflect.Indirect(v).(*reflect.MapValue)
-                               if mv.Len() == 0 {
+                               if !state.sendZero && mv.Len() == 0 {
                                        return
                                }
                                state.update(i)