]> Cypherpunks repositories - gostls13.git/commitdiff
trivial bug: []byte is special but [3]byte is not.
authorRob Pike <r@golang.org>
Thu, 31 Dec 2009 01:47:20 +0000 (12:47 +1100)
committerRob Pike <r@golang.org>
Thu, 31 Dec 2009 01:47:20 +0000 (12:47 +1100)
modify a test to verify the fix.

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

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

index cf380cd56f5edf2a2e0a4bdd725e39cced4062e7..8ba5031384179ceb659af0d8420c89158e03610f 100644 (file)
@@ -249,20 +249,22 @@ func (enc *Encoder) sendType(origt reflect.Type) {
        // Drill down to the base type.
        rt, _ := indirect(origt)
 
-       // We only send structs - everything else is basic or an error
        switch rt := rt.(type) {
        default:
                // Basic types do not need to be described.
                return
-       case reflect.ArrayOrSliceType:
+       case *reflect.SliceType:
                // If it's []uint8, don't send; it's considered basic.
                if _, ok := rt.Elem().(*reflect.Uint8Type); ok {
                        return
                }
                // Otherwise we do send.
                break
-       // Struct types are not sent, only their element types.
+       case *reflect.ArrayType:
+               // arrays must be sent so we know their lengths and element types.
+               break
        case *reflect.StructType:
+               // structs must be sent so we know their fields.
                break
        case *reflect.ChanType, *reflect.FuncType, *reflect.MapType, *reflect.InterfaceType:
                // Probably a bad field in a struct.
@@ -337,7 +339,6 @@ func (enc *Encoder) Encode(e interface{}) os.Error {
                // No, so send it.
                enc.sendType(rt)
                if enc.state.err != nil {
-                       enc.countState.b.Reset()
                        return enc.state.err
                }
        }
index a25ad6908836a5b8a964546a4a38a7e77f0b3022..4250b8a9d7765213aed3474155e9a1b44cc4fb4e 100644 (file)
@@ -240,11 +240,12 @@ func TestValueError(t *testing.T) {
 func TestArray(t *testing.T) {
        type Type5 struct {
                a [3]string
+               b [3]byte
        }
        type Type6 struct {
                a [2]string // can't hold t5.a
        }
-       t5 := Type5{[3]string{"hello", ",", "world"}}
+       t5 := Type5{[3]string{"hello", ",", "world"}, [3]byte{1, 2, 3}}
        var t5p Type5
        if err := encAndDec(t5, &t5p); err != nil {
                t.Error(err)