"runtime"
"strconv"
"sync"
- "unsafe"
)
// The default bencode string length limit. This is a poor attempt to prevent excessive memory
d.buf.Grow(length)
b := d.buf.Bytes()[:length]
read(b)
- x, err := strconv.ParseBool(unsafe.String(unsafe.SliceData(b), len(b)))
+ x, err := strconv.ParseBool(bytesAsString(b))
if err != nil {
x = length != 0
}
import (
"reflect"
- "unsafe"
)
// Wow Go is retarded.
marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
)
-
-func bytesAsString(b []byte) string {
- return *(*string)(unsafe.Pointer(&b))
-}
--- /dev/null
+//go:build !go1.20
+
+package bencode
+
+import "unsafe"
+
+func bytesAsString(b []byte) string {
+ return *(*string)(unsafe.Pointer(&b))
+}
--- /dev/null
+//go:build go1.20
+
+package bencode
+
+import "unsafe"
+
+func bytesAsString(b []byte) string {
+ return unsafe.String(unsafe.SliceData(b), len(b))
+}