Commit df018ea6 authored by Matthew Holt's avatar Matthew Holt

Properly handle path-only addresses (also fix godoc typos)

parent 4ff46ad4
...@@ -236,7 +236,7 @@ func listenerAddrEqual(ln net.Listener, addr string) bool { ...@@ -236,7 +236,7 @@ func listenerAddrEqual(ln net.Listener, addr string) bool {
} }
// TCPServer is a type that can listen and serve connections. // TCPServer is a type that can listen and serve connections.
// A TCPServer must associate with exactly or one net.Listeners. // A TCPServer must associate with exactly zero or one net.Listeners.
type TCPServer interface { type TCPServer interface {
// Listen starts listening by creating a new listener // Listen starts listening by creating a new listener
// and returning it. It does not start accepting // and returning it. It does not start accepting
...@@ -254,7 +254,7 @@ type TCPServer interface { ...@@ -254,7 +254,7 @@ type TCPServer interface {
} }
// UDPServer is a type that can listen and serve packets. // UDPServer is a type that can listen and serve packets.
// A UDPServer must associate with exactly or one net.PacketConns. // A UDPServer must associate with exactly zero or one net.PacketConns.
type UDPServer interface { type UDPServer interface {
// ListenPacket starts listening by creating a new packetconn // ListenPacket starts listening by creating a new packetconn
// and returning it. It does not start accepting connections. // and returning it. It does not start accepting connections.
......
...@@ -273,12 +273,12 @@ func (a Address) VHost() string { ...@@ -273,12 +273,12 @@ func (a Address) VHost() string {
} }
// standardizeAddress parses an address string into a structured format with separate // standardizeAddress parses an address string into a structured format with separate
// scheme, host, and port portions, as well as the original input string. // scheme, host, port, and path portions, as well as the original input string.
func standardizeAddress(str string) (Address, error) { func standardizeAddress(str string) (Address, error) {
input := str input := str
// Split input into components (prepend with // to assert host by default) // Split input into components (prepend with // to assert host by default)
if !strings.Contains(str, "//") { if !strings.Contains(str, "//") && !strings.HasPrefix(str, "/") {
str = "//" + str str = "//" + str
} }
u, err := url.Parse(str) u, err := url.Parse(str)
......
...@@ -50,6 +50,7 @@ func TestStandardizeAddress(t *testing.T) { ...@@ -50,6 +50,7 @@ func TestStandardizeAddress(t *testing.T) {
{`https://host:443/path/foo`, "https", "host", "443", "/path/foo", false}, {`https://host:443/path/foo`, "https", "host", "443", "/path/foo", false},
{`host:80/path`, "", "host", "80", "/path", false}, {`host:80/path`, "", "host", "80", "/path", false},
{`host:https/path`, "https", "host", "443", "/path", false}, {`host:https/path`, "https", "host", "443", "/path", false},
{`/path`, "", "", "", "/path", false},
} { } {
actual, err := standardizeAddress(test.input) actual, err := standardizeAddress(test.input)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment