util/copy.go | 3 +++ util/copy_test.go | 9 +++++++++ diff --git a/util/copy.go b/util/copy.go index fda4cffc39906c68bf0881a076d33ae8f73a3faf..94d98255b22e15fd0439474c66064b5699f4711f 100644 --- a/util/copy.go +++ b/util/copy.go @@ -14,6 +14,9 @@ } if dV.Kind() == reflect.Array && !dV.CanAddr() { panic(fmt.Sprintf("dest not addressable: %T", dest)) } + if sV.Kind() == reflect.Ptr { + sV = sV.Elem() + } if sV.Kind() == reflect.String { sV = sV.Convert(reflect.SliceOf(dV.Type().Elem())) } diff --git a/util/copy_test.go b/util/copy_test.go index 18c9e2d6b80da87d3c7ea8b326ad649c443fea4b..452987101ff16a5bf40aac3af076a6a55fc71a3a 100644 --- a/util/copy_test.go +++ b/util/copy_test.go @@ -78,3 +78,12 @@ } }() CopyExact(&arr, nil) } + +func TestCopySrcPtr(t *testing.T) { + var bigDst [1024]byte + var bigSrc [1024]byte = [1024]byte{'h', 'i'} + CopyExact(&bigDst, &bigSrc) + if !bytes.Equal(bigDst[:], bigSrc[:]) { + t.FailNow() + } +}