]> Sergey Matveev's repositories - btrtrc.git/blob - bencode/misc.go
Fix possible misuse of reflect.StringHeader
[btrtrc.git] / bencode / misc.go
1 package bencode
2
3 import (
4         "reflect"
5         "unsafe"
6 )
7
8 // Wow Go is retarded.
9 var marshalerType = reflect.TypeOf(func() *Marshaler {
10         var m Marshaler
11         return &m
12 }()).Elem()
13
14 // Wow Go is retarded.
15 var unmarshalerType = reflect.TypeOf(func() *Unmarshaler {
16         var i Unmarshaler
17         return &i
18 }()).Elem()
19
20 func bytesAsString(b []byte) string {
21         if len(b) == 0 {
22                 return ""
23         }
24         // See https://github.com/golang/go/issues/40701.
25         var s string
26         hdr := (*reflect.StringHeader)(unsafe.Pointer(&s))
27         hdr.Data = uintptr(unsafe.Pointer(&b[0]))
28         hdr.Len = len(b)
29         return s
30 }