mirror of
https://github.com/golang/go
synced 2024-11-25 07:07:57 -07:00
trivial bug: []byte is special but [3]byte is not.
modify a test to verify the fix. R=rsc CC=golang-dev https://golang.org/cl/183090
This commit is contained in:
parent
bcabc99a92
commit
5a44338159
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user