]> Sergey Matveev's repositories - btrtrc.git/commitdiff
bencode: Only use unsafe.String for go>=1.20 v1.49.1
authorMatt Joiner <anacrolix@gmail.com>
Mon, 3 Apr 2023 05:10:38 +0000 (15:10 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 3 Apr 2023 05:10:38 +0000 (15:10 +1000)
bencode/decode.go
bencode/misc.go
bencode/string.go [new file with mode: 0644]
bencode/string_go120.go [new file with mode: 0644]

index 6300f5cd7a02ad11e8288680faa1a7f1412759cc..3839b849c21155cffb15132d12b310d3c3936900 100644 (file)
@@ -10,7 +10,6 @@ import (
        "runtime"
        "strconv"
        "sync"
-       "unsafe"
 )
 
 // The default bencode string length limit. This is a poor attempt to prevent excessive memory
@@ -256,7 +255,7 @@ func (d *Decoder) parseString(v reflect.Value) error {
                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
                }
index 2e9f1fac1d332a4ba39bbc6cb6d907d8e81deb40..66900085105d710be171168d00d350fa1f14c589 100644 (file)
@@ -2,7 +2,6 @@ package bencode
 
 import (
        "reflect"
-       "unsafe"
 )
 
 // Wow Go is retarded.
@@ -10,7 +9,3 @@ var (
        marshalerType   = reflect.TypeOf((*Marshaler)(nil)).Elem()
        unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
 )
-
-func bytesAsString(b []byte) string {
-       return *(*string)(unsafe.Pointer(&b))
-}
diff --git a/bencode/string.go b/bencode/string.go
new file mode 100644 (file)
index 0000000..0c6e307
--- /dev/null
@@ -0,0 +1,9 @@
+//go:build !go1.20
+
+package bencode
+
+import "unsafe"
+
+func bytesAsString(b []byte) string {
+       return *(*string)(unsafe.Pointer(&b))
+}
diff --git a/bencode/string_go120.go b/bencode/string_go120.go
new file mode 100644 (file)
index 0000000..1688d9b
--- /dev/null
@@ -0,0 +1,9 @@
+//go:build go1.20
+
+package bencode
+
+import "unsafe"
+
+func bytesAsString(b []byte) string {
+       return unsafe.String(unsafe.SliceData(b), len(b))
+}