From 0e82278cd505f8dc0b2c17bd0b43e7d22844f292 Mon Sep 17 00:00:00 2001 From: moriyoshi Date: Sun, 27 Jun 2010 01:32:37 +0900 Subject: [PATCH] Fix: InterfaceValue wasnt' correctly unwrapped when passed to PackValue() --- go/pack.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/go/pack.go b/go/pack.go index d30eef8..602f48a 100644 --- a/go/pack.go +++ b/go/pack.go @@ -521,7 +521,7 @@ func PackMap(writer io.Writer, value *reflect.MapValue) (n int, err os.Error) { } func PackValue(writer io.Writer, value reflect.Value) (n int, err os.Error) { - if value.Type() == nil { return PackNil(writer) } + if value == nil || value.Type() == nil { return PackNil(writer) } switch _value := value.(type) { case *reflect.BoolValue: return PackBool(writer, _value.Get()) case *reflect.UintValue: return PackUint64(writer, _value.Get()) @@ -530,6 +530,12 @@ func PackValue(writer io.Writer, value reflect.Value) (n int, err os.Error) { case *reflect.ArrayValue: return PackArray(writer, _value) case *reflect.SliceValue: return PackArray(writer, _value) case *reflect.MapValue: return PackMap(writer, _value) + case *reflect.InterfaceValue: + __value := reflect.NewValue(_value.Interface()) + _, ok := __value.(*reflect.InterfaceValue) + if !ok { + return PackValue(writer, __value) + } } panic("unsupported type: " + value.Type().String()) }