]> Cypherpunks repositories - gostls13.git/commitdiff
gob: fix trivial bug in map marshaling.
authorRob Pike <r@golang.org>
Tue, 19 Apr 2011 17:41:12 +0000 (10:41 -0700)
committerRob Pike <r@golang.org>
Tue, 19 Apr 2011 17:41:12 +0000 (10:41 -0700)
Forgot to send key/value types.

R=rsc
CC=golang-dev, hmc2you
https://golang.org/cl/4434058

src/pkg/gob/encoder.go
src/pkg/gob/encoder_test.go

index 928f3b244b6cfe4ee87518fac32de820186a0ee2..dcd84281d3facb9854cb7a85a86eb2d5daab83e3 100644 (file)
@@ -116,6 +116,9 @@ func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTyp
                }
        case reflect.Array, reflect.Slice:
                enc.sendType(w, state, st.Elem())
+       case reflect.Map:
+               enc.sendType(w, state, st.Key())
+               enc.sendType(w, state, st.Elem())
        }
        return true
 }
index 7b02a0b42ebfe883e92fff4c848c086c6c93a010..3dde8f184ce75d36f37e70734a68ace8754a15d4 100644 (file)
@@ -514,3 +514,38 @@ func TestNestedInterfaces(t *testing.T) {
                t.Fatalf("final value %d; expected %d", inner.A, 7)
        }
 }
+
+// The bugs keep coming. We forgot to send map subtypes before the map.
+
+type Bug1Elem struct {
+       Name string
+       Id   int
+}
+
+type Bug1StructMap map[string]Bug1Elem
+
+func bug1EncDec(in Bug1StructMap, out *Bug1StructMap) os.Error {
+       return nil
+}
+
+func TestMapBug1(t *testing.T) {
+       in := make(Bug1StructMap)
+       in["val1"] = Bug1Elem{"elem1", 1}
+       in["val2"] = Bug1Elem{"elem2", 2}
+
+       b := new(bytes.Buffer)
+       enc := NewEncoder(b)
+       err := enc.Encode(in)
+       if err != nil {
+               t.Fatal("encode:", err)
+       }
+       dec := NewDecoder(b)
+       out := make(Bug1StructMap)
+       err = dec.Decode(&out)
+       if err != nil {
+               t.Fatal("decode:", err)
+       }
+       if !reflect.DeepEqual(in, out) {
+               t.Errorf("mismatch: %v %v", in, out)
+       }
+}