From: Andrew Bonventre Date: Sun, 23 Dec 2018 21:48:38 +0000 (-0500) Subject: reflect: fix panic when Value.IsNil is called for UnsafePointer X-Git-Tag: go1.12beta2~87 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3b66c00857ff77f8acfc3e6e9491dda3677858a4;p=gostls13.git reflect: fix panic when Value.IsNil is called for UnsafePointer UnsafePointer is a valid type kind to call IsNil on. Fixes #29381 Change-Id: Iaf65d582c67f4be52cd1885badf40f174920500b Reviewed-on: https://go-review.googlesource.com/c/155797 Run-TryBot: Andrew Bonventre TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall --- diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index 4b215f120c..10b52456f3 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -1009,6 +1009,7 @@ func TestIsNil(t *testing.T) { struct{ x func() bool }{}, struct{ x chan int }{}, struct{ x []string }{}, + struct{ x unsafe.Pointer }{}, } for _, ts := range doNil { ty := TypeOf(ts).Field(0).Type diff --git a/src/reflect/value.go b/src/reflect/value.go index 8906febb9b..7ae2dd8d10 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -1031,7 +1031,7 @@ func (v Value) InterfaceData() [2]uintptr { func (v Value) IsNil() bool { k := v.kind() switch k { - case Chan, Func, Map, Ptr: + case Chan, Func, Map, Ptr, UnsafePointer: if v.flag&flagMethod != 0 { return false }