resolver: always fall back to default resolver when target does not follow URI scheme (#1889)

Previously, any target with "://" would be handled according to the URI scheme even though it did not contain a third slash.
This commit is contained in:
Menghan Li 2018-03-09 06:00:17 +08:00 committed by dfawley
parent 9aba04495f
commit 90dca43332
2 changed files with 13 additions and 2 deletions

View File

@ -54,7 +54,10 @@ func parseTarget(target string) (ret resolver.Target) {
if !ok { if !ok {
return resolver.Target{Endpoint: target} return resolver.Target{Endpoint: target}
} }
ret.Authority, ret.Endpoint, _ = split2(ret.Endpoint, "/") ret.Authority, ret.Endpoint, ok = split2(ret.Endpoint, "/")
if !ok {
return resolver.Target{Endpoint: target}
}
return ret return ret
} }

View File

@ -53,7 +53,6 @@ func TestParseTargetString(t *testing.T) {
want resolver.Target want resolver.Target
}{ }{
{"", resolver.Target{"", "", ""}}, {"", resolver.Target{"", "", ""}},
{"://", resolver.Target{"", "", ""}},
{":///", resolver.Target{"", "", ""}}, {":///", resolver.Target{"", "", ""}},
{"a:///", resolver.Target{"a", "", ""}}, {"a:///", resolver.Target{"a", "", ""}},
{"://a/", resolver.Target{"", "a", ""}}, {"://a/", resolver.Target{"", "a", ""}},
@ -70,6 +69,15 @@ func TestParseTargetString(t *testing.T) {
{"google.com", resolver.Target{"", "", "google.com"}}, {"google.com", resolver.Target{"", "", "google.com"}},
{"google.com/?a=b", resolver.Target{"", "", "google.com/?a=b"}}, {"google.com/?a=b", resolver.Target{"", "", "google.com/?a=b"}},
{"/unix/socket/address", resolver.Target{"", "", "/unix/socket/address"}}, {"/unix/socket/address", resolver.Target{"", "", "/unix/socket/address"}},
// If we can only parse part of the target.
{"://", resolver.Target{"", "", "://"}},
{"unix://domain", resolver.Target{"", "", "unix://domain"}},
{"a:b", resolver.Target{"", "", "a:b"}},
{"a/b", resolver.Target{"", "", "a/b"}},
{"a:/b", resolver.Target{"", "", "a:/b"}},
{"a//b", resolver.Target{"", "", "a//b"}},
{"a://b", resolver.Target{"", "", "a://b"}},
} { } {
got := parseTarget(test.targetStr) got := parseTarget(test.targetStr)
if got != test.want { if got != test.want {