]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
conn: remove scope when sanity checking IP address format
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 9 May 2019 13:33:57 +0000 (15:33 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Thu, 9 May 2019 13:42:35 +0000 (15:42 +0200)
device/conn.go

index 3c2aa04d8bdf12f9514c85a016d5b6e357dddb65..d57aa8cb1cb2ff7c6aab2026636dbff0075b9efe 100644 (file)
@@ -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)
        }