diff options
Diffstat (limited to 'network/wsNetwork.go')
-rw-r--r-- | network/wsNetwork.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/network/wsNetwork.go b/network/wsNetwork.go index 0a0006531..ace79c5b0 100644 --- a/network/wsNetwork.go +++ b/network/wsNetwork.go @@ -1913,6 +1913,8 @@ var errBcastQFull = errors.New("broadcast queue full") var errURLNoHost = errors.New("could not parse a host from url") +var errURLColonHost = errors.New("host name starts with a colon") + // HostColonPortPattern matches "^[-a-zA-Z0-9.]+:\\d+$" e.g. "foo.com.:1234" var HostColonPortPattern = regexp.MustCompile("^[-a-zA-Z0-9.]+:\\d+$") @@ -1937,6 +1939,11 @@ func ParseHostOrURL(addr string) (*url.URL, error) { // This turns "[::]:4601" into "http://[::]:4601" which url.Parse can do parsed, e2 := url.Parse("http://" + addr) if e2 == nil { + // https://datatracker.ietf.org/doc/html/rfc1123#section-2 + // first character is relaxed to allow either a letter or a digit + if parsed.Host[0] == ':' && (len(parsed.Host) < 2 || parsed.Host[1] != ':') { + return nil, errURLColonHost + } return parsed, nil } return parsed, err /* return original err, not our prefix altered try */ |