"context"
"fmt"
"internal/testenv"
+ "net/netip"
"reflect"
"runtime"
"sort"
t.Fatalf("DefaultResolver.LookupIP(%q, %q): failed with unexpected error: %v", network, host, err)
}
- var v4Addrs []IP
- var v6Addrs []IP
+ var v4Addrs []netip.Addr
+ var v6Addrs []netip.Addr
for _, ip := range ips {
- switch {
- case ip.To4() != nil:
- // We need to skip the test below because To16 will
- // convent an IPv4 address to an IPv4-mapped IPv6
- // address.
- v4Addrs = append(v4Addrs, ip)
- case ip.To16() != nil:
- v6Addrs = append(v6Addrs, ip)
- default:
+ if addr, ok := netip.AddrFromSlice(ip); ok {
+ if addr.Is4() {
+ v4Addrs = append(v4Addrs, addr)
+ } else {
+ v6Addrs = append(v6Addrs, addr)
+ }
+ } else {
t.Fatalf("IP=%q is neither IPv4 nor IPv6", ip)
}
}
t.Errorf("DefaultResolver.LookupIP(%q, %q): unexpected IPv4 addresses: %v", network, host, v4Addrs)
}
if network == "ip4" && len(v6Addrs) > 0 {
- t.Errorf("DefaultResolver.LookupIP(%q, %q): unexpected IPv6 addresses: %v", network, host, v6Addrs)
+ t.Errorf("DefaultResolver.LookupIP(%q, %q): unexpected IPv6 or IPv4-mapped IPv6 addresses: %v", network, host, v6Addrs)
}
})
}
switch result.Family {
case syscall.AF_INET:
a := (*syscall.RawSockaddrInet4)(addr).Addr
- addrs = append(addrs, IPAddr{IP: IPv4(a[0], a[1], a[2], a[3])})
+ addrs = append(addrs, IPAddr{IP: copyIP(a[:])})
case syscall.AF_INET6:
a := (*syscall.RawSockaddrInet6)(addr).Addr
zone := zoneCache.name(int((*syscall.RawSockaddrInet6)(addr).Scope_id))
- addrs = append(addrs, IPAddr{IP: IP{a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]}, Zone: zone})
+ addrs = append(addrs, IPAddr{IP: copyIP(a[:]), Zone: zone})
default:
return nil, &DNSError{Err: syscall.EWINDOWS.Error(), Name: name}
}