mirror of https://github.com/golang/go.git
net/netip: fix formatting of IPv4-in-6 address with zone
Weird, but don't drop the zone when stringifying. Fixes #50111 Change-Id: I5fbccdfedcdc77a77ee6bafc8d82b8ec8ec7220c Reviewed-on: https://go-review.googlesource.com/c/go/+/371094 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matt Layher <mdlayher@gmail.com> Trust: Matt Layher <mdlayher@gmail.com> Trust: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
766f89b5c6
commit
1c1998ea08
|
|
@ -769,7 +769,11 @@ func (ip Addr) String() string {
|
||||||
default:
|
default:
|
||||||
if ip.Is4In6() {
|
if ip.Is4In6() {
|
||||||
// TODO(bradfitz): this could alloc less.
|
// TODO(bradfitz): this could alloc less.
|
||||||
return "::ffff:" + ip.Unmap().String()
|
if z := ip.Zone(); z != "" {
|
||||||
|
return "::ffff:" + ip.Unmap().String() + "%" + z
|
||||||
|
} else {
|
||||||
|
return "::ffff:" + ip.Unmap().String()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ip.string6()
|
return ip.string6()
|
||||||
}
|
}
|
||||||
|
|
@ -787,7 +791,12 @@ func (ip Addr) AppendTo(b []byte) []byte {
|
||||||
default:
|
default:
|
||||||
if ip.Is4In6() {
|
if ip.Is4In6() {
|
||||||
b = append(b, "::ffff:"...)
|
b = append(b, "::ffff:"...)
|
||||||
return ip.Unmap().appendTo4(b)
|
b = ip.Unmap().appendTo4(b)
|
||||||
|
if z := ip.Zone(); z != "" {
|
||||||
|
b = append(b, '%')
|
||||||
|
b = append(b, z...)
|
||||||
|
}
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
return ip.appendTo6(b)
|
return ip.appendTo6(b)
|
||||||
}
|
}
|
||||||
|
|
@ -947,10 +956,16 @@ func (ip Addr) MarshalText() ([]byte, error) {
|
||||||
b := make([]byte, 0, max)
|
b := make([]byte, 0, max)
|
||||||
if ip.Is4In6() {
|
if ip.Is4In6() {
|
||||||
b = append(b, "::ffff:"...)
|
b = append(b, "::ffff:"...)
|
||||||
return ip.Unmap().appendTo4(b), nil
|
b = ip.Unmap().appendTo4(b)
|
||||||
|
if z := ip.Zone(); z != "" {
|
||||||
|
b = append(b, '%')
|
||||||
|
b = append(b, z...)
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
}
|
}
|
||||||
return ip.appendTo6(b), nil
|
return ip.appendTo6(b), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalText implements the encoding.TextUnmarshaler interface.
|
// UnmarshalText implements the encoding.TextUnmarshaler interface.
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,12 @@ func TestParseAddr(t *testing.T) {
|
||||||
ip: MkAddr(Mk128(0x0001000200000000, 0x0000ffffc0a88cff), intern.Get("eth1")),
|
ip: MkAddr(Mk128(0x0001000200000000, 0x0000ffffc0a88cff), intern.Get("eth1")),
|
||||||
str: "1:2::ffff:c0a8:8cff%eth1",
|
str: "1:2::ffff:c0a8:8cff%eth1",
|
||||||
},
|
},
|
||||||
|
// 4-in-6 with zone
|
||||||
|
{
|
||||||
|
in: "::ffff:192.168.140.255%eth1",
|
||||||
|
ip: MkAddr(Mk128(0, 0x0000ffffc0a88cff), intern.Get("eth1")),
|
||||||
|
str: "::ffff:192.168.140.255%eth1",
|
||||||
|
},
|
||||||
// IPv6 with capital letters.
|
// IPv6 with capital letters.
|
||||||
{
|
{
|
||||||
in: "FD9E:1A04:F01D::1",
|
in: "FD9E:1A04:F01D::1",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue