From: Tobias Klauser Date: Fri, 23 Sep 2022 21:56:17 +0000 (+0000) Subject: Revert "net/netip: use slice-to-array conversions" X-Git-Tag: go1.20rc1~947 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e5deb1556b230642d544c451a83cb79f641727a3;p=gostls13.git Revert "net/netip: use slice-to-array conversions" This reverts commit 3dcf6e2c29f533865aad58488b60ae8d819a566e. Reason for revert: breaks the longtest builders for x/tools Change-Id: I6b6d5afbe46890b6a59829e3d5ab50d885661696 Reviewed-on: https://go-review.googlesource.com/c/go/+/433478 Reviewed-by: Cherry Mui Auto-Submit: Tobias Klauser Run-TryBot: Cherry Mui Run-TryBot: Tobias Klauser Reviewed-by: Damien Neil TryBot-Result: Gopher Robot --- diff --git a/src/net/netip/netip.go b/src/net/netip/netip.go index adb4117d4a..b5d55acdb3 100644 --- a/src/net/netip/netip.go +++ b/src/net/netip/netip.go @@ -102,6 +102,18 @@ func AddrFrom16(addr [16]byte) Addr { } } +// ipv6Slice is like IPv6Raw, but operates on a 16-byte slice. Assumes +// slice is 16 bytes, caller must enforce this. +func ipv6Slice(addr []byte) Addr { + return Addr{ + addr: uint128{ + beUint64(addr[:8]), + beUint64(addr[8:]), + }, + z: z6noz, + } +} + // ParseAddr parses s as an IP address, returning the result. The string // s can be in dotted decimal ("192.0.2.1"), IPv6 ("2001:db8::68"), // or IPv6 with a scoped addressing zone ("fe80::1cc0:3e8c:119f:c2e1%ens18"). @@ -333,9 +345,9 @@ func parseIPv6(in string) (Addr, error) { func AddrFromSlice(slice []byte) (ip Addr, ok bool) { switch len(slice) { case 4: - return AddrFrom4([4]byte(slice)), true + return AddrFrom4(*(*[4]byte)(slice)), true case 16: - return AddrFrom16([16]byte(slice)), true + return ipv6Slice(slice), true } return Addr{}, false } @@ -1008,10 +1020,10 @@ func (ip *Addr) UnmarshalBinary(b []byte) error { *ip = AddrFrom4(*(*[4]byte)(b)) return nil case n == 16: - *ip = AddrFrom16([16]byte(b)) + *ip = ipv6Slice(b) return nil case n > 16: - *ip = AddrFrom16([16]byte(b[:16])).WithZone(string(b[16:])) + *ip = ipv6Slice(b[:16]).WithZone(string(b[16:])) return nil } return errors.New("unexpected slice size")