From 586112b5d78abc99c9858c9a9a40756d5854d311 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 9 May 2019 15:33:57 +0200 Subject: conn: remove scope when sanity checking IP address format --- device/conn.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'device/conn.go') diff --git a/device/conn.go b/device/conn.go index 3c2aa04..d57aa8c 100644 --- a/device/conn.go +++ b/device/conn.go @@ -10,6 +10,7 @@ import ( "golang.org/x/net/ipv4" "golang.org/x/net/ipv6" "net" + "strings" ) const ( @@ -41,13 +42,18 @@ type Endpoint interface { } func parseEndpoint(s string) (*net.UDPAddr, error) { - // ensure that the host is an IP address host, _, err := net.SplitHostPort(s) if err != nil { return nil, err } + if i := strings.LastIndexByte(host, '%'); i > 0 && strings.IndexByte(host, ':') >= 0 { + // Remove the scope, if any. ResolveUDPAddr below will use it, but here we're just + // trying to make sure with a small sanity test that this is a real IP address and + // not something that's likely to incur DNS lookups. + host = host[:i] + } if ip := net.ParseIP(host); ip == nil { return nil, errors.New("Failed to parse IP address: " + host) } -- cgit v1.2.3-59-g8ed1b