diff --git a/internal/unsafe/unsafe.go b/internal/unsafe/unsafe.go index 0b24bec8..29c485fb 100644 --- a/internal/unsafe/unsafe.go +++ b/internal/unsafe/unsafe.go @@ -12,11 +12,12 @@ func BytesView(s interface{}) []byte { v := reflect.ValueOf(s) first := v.Index(0) sz := int(first.Type().Size()) - return *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ - Data: uintptr(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(first.UnsafeAddr())))), - Len: v.Len() * sz, - Cap: v.Cap() * sz, - })) + var res []byte + h := (*reflect.SliceHeader)(unsafe.Pointer(&res)) + h.Data = first.UnsafeAddr() + h.Cap = v.Cap() * sz + h.Len = v.Len() * sz + return res } // SliceOf returns a slice from a (native) pointer. @@ -24,12 +25,11 @@ func SliceOf(s uintptr) []byte { if s == 0 { return nil } - sh := reflect.SliceHeader{ - Data: s, - Len: 1 << 30, - Cap: 1 << 30, - } - return *(*[]byte)(unsafe.Pointer(&sh)) + var res []byte + h := (*reflect.SliceHeader)(unsafe.Pointer(&res)) + h.Data = s + h.Cap = 1 << 30 + return res } // GoString convert a NUL-terminated C string