return "", errors.New("invalid IP-literal")
}
return "[" + unescapedHostname + "]" + unescapedColonPort, nil
- } else if i := strings.LastIndex(host, ":"); i != -1 {
+ } else if i := strings.Index(host, ":"); i != -1 {
+ // IPv4address / reg-name
+ // E.g. 1.2.3.4, 1.2.3.4:80, example.com, example.com:80
colonPort := host[i:]
if !validOptionalPort(colonPort) {
return "", fmt.Errorf("invalid port %q after host", colonPort)
},
"",
},
- {
- // Malformed IPv6 but still accepted.
- "http://2b01:e34:ef40:7730:8e70:5aff:fefe:edac:8080/foo",
- &URL{
- Scheme: "http",
- Host: "2b01:e34:ef40:7730:8e70:5aff:fefe:edac:8080",
- Path: "/foo",
- },
- "",
- },
- {
- // Malformed IPv6 but still accepted.
- "http://2b01:e34:ef40:7730:8e70:5aff:fefe:edac:/foo",
- &URL{
- Scheme: "http",
- Host: "2b01:e34:ef40:7730:8e70:5aff:fefe:edac:",
- Path: "/foo",
- },
- "",
- },
{
"http://[2b01:e34:ef40:7730:8e70:5aff:fefe:edac]:8080/foo",
&URL{
{"https://[0:0::test.com]:80", false},
{"https://[2001:db8::test.com]", false},
{"https://[test.com]", false},
+ {"https://1:2:3:4:5:6:7:8", false},
+ {"https://1:2:3:4:5:6:7:8:80", false},
+ {"https://example.com:80:", false},
}
func TestParseRequestURI(t *testing.T) {