diff --git a/src/pkg/encoding/gob/decode.go b/src/pkg/encoding/gob/decode.go index ba1f2eb8130..4d1325d176c 100644 --- a/src/pkg/encoding/gob/decode.go +++ b/src/pkg/encoding/gob/decode.go @@ -1039,9 +1039,9 @@ func (dec *Decoder) compatibleType(fr reflect.Type, fw typeId, inProgress map[re // Extract and compare element types. var sw *sliceType if tt, ok := builtinIdToType[fw]; ok { - sw = tt.(*sliceType) - } else { - sw = dec.wireType[fw].SliceT + sw, _ = tt.(*sliceType) + } else if wire != nil { + sw = wire.SliceT } elem := userType(t.Elem()).base return sw != nil && dec.compatibleType(elem, sw.Elem, inProgress) diff --git a/src/pkg/encoding/gob/encoder_test.go b/src/pkg/encoding/gob/encoder_test.go index cd1500d0772..7a30f9107e6 100644 --- a/src/pkg/encoding/gob/encoder_test.go +++ b/src/pkg/encoding/gob/encoder_test.go @@ -678,3 +678,11 @@ func TestUnexportedChan(t *testing.T) { t.Fatalf("error encoding unexported channel: %s", err) } } + +func TestSliceIncompatibility(t *testing.T) { + var in = []byte{1, 2, 3} + var out []int + if err := encAndDec(in, &out); err == nil { + t.Error("expected compatibility error") + } +}