]> Cypherpunks repositories - gostls13.git/commitdiff
gobs: fix bug in singleton arrays
authorRob Pike <r@golang.org>
Wed, 21 Jul 2010 02:53:28 +0000 (19:53 -0700)
committerRob Pike <r@golang.org>
Wed, 21 Jul 2010 02:53:28 +0000 (19:53 -0700)
Fixes #934.

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

src/pkg/gob/encode.go
src/pkg/gob/encoder_test.go

index 00548868bb142fdc47641ec6b30efa8e8d3701af..55abeaf6575a478ddc9847566028343e8c93b4a9 100644 (file)
@@ -722,10 +722,6 @@ func encOpFor(rt reflect.Type) (encOp, int, os.Error) {
                                return nil, 0, err
                        }
                        op = func(i *encInstr, state *encoderState, p unsafe.Pointer) {
-                               slice := (*reflect.SliceHeader)(p)
-                               if slice.Len == 0 {
-                                       return
-                               }
                                state.update(i)
                                state.err = encodeArray(state.b, uintptr(p), elemOp, t.Elem().Size(), indir, t.Len())
                        }
index b578cd0f8717058f594e1cf5216ba2ec6f5b4ee1..f5b68113eeb6f86ff1b3daa88e52634a2f935d1d 100644 (file)
@@ -274,6 +274,7 @@ var testFloat32 float32
 var testString string
 var testSlice []string
 var testMap map[string]int
+var testArray [7]int
 
 type SingleTest struct {
        in  interface{}
@@ -287,6 +288,8 @@ var singleTests = []SingleTest{
        SingleTest{"bike shed", &testString, ""},
        SingleTest{[]string{"bike", "shed", "paint", "color"}, &testSlice, ""},
        SingleTest{map[string]int{"seven": 7, "twelve": 12}, &testMap, ""},
+       SingleTest{[7]int{4, 55, 0, 0, 0, 0, 0}, &testArray, ""}, // case that once triggered a bug
+       SingleTest{[7]int{4, 55, 1, 44, 22, 66, 1234}, &testArray, ""},
 
        // Decode errors
        SingleTest{172, &testFloat32, "wrong type"},
@@ -320,7 +323,7 @@ func TestSingletons(t *testing.T) {
                // Get rid of the pointer in the rhs
                val := reflect.NewValue(test.out).(*reflect.PtrValue).Elem().Interface()
                if !reflect.DeepEqual(test.in, val) {
-                       t.Errorf("decoding int: expected %v got %v", test.in, val)
+                       t.Errorf("decoding singleton: expected %v got %v", test.in, val)
                }
        }
 }