Skip to content

Commit 817c1e8

Browse files
authoredNov 16, 2022
passthrough: return error if endpoint is empty and opt.Dialer is nil when building resolver (grpc#5732)
1 parent 56ac86f commit 817c1e8

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed
 

‎clientconn_parsed_target_test.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) {
4040
wantParsed resolver.Target
4141
}{
4242
// No scheme is specified.
43-
{target: "", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", Endpoint: ""}},
4443
{target: "://", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", Endpoint: "://"}},
4544
{target: ":///", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", Endpoint: ":///"}},
4645
{target: "://a/", badScheme: true, wantParsed: resolver.Target{Scheme: defScheme, Authority: "", Endpoint: "://a/"}},
@@ -110,6 +109,7 @@ func (s) TestParsedTarget_Success_WithoutCustomDialer(t *testing.T) {
110109

111110
func (s) TestParsedTarget_Failure_WithoutCustomDialer(t *testing.T) {
112111
targets := []string{
112+
"",
113113
"unix://a/b/c",
114114
"unix://authority",
115115
"unix-abstract://authority/a/b/c",
@@ -179,6 +179,12 @@ func (s) TestParsedTarget_WithCustomDialer(t *testing.T) {
179179
wantParsed: resolver.Target{Scheme: defScheme, Authority: "", Endpoint: "/unix/socket/address"},
180180
wantDialerAddress: "/unix/socket/address",
181181
},
182+
{
183+
target: "",
184+
badScheme: true,
185+
wantParsed: resolver.Target{Scheme: defScheme, Authority: "", Endpoint: ""},
186+
wantDialerAddress: "",
187+
},
182188
{
183189
target: "passthrough://a.server.com/google.com",
184190
wantParsed: resolver.Target{Scheme: "passthrough", Authority: "a.server.com", Endpoint: "google.com"},

‎internal/resolver/passthrough/passthrough.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,20 @@
2020
// name without scheme back to gRPC as resolved address.
2121
package passthrough
2222

23-
import "google.golang.org/grpc/resolver"
23+
import (
24+
"errors"
25+
26+
"google.golang.org/grpc/resolver"
27+
)
2428

2529
const scheme = "passthrough"
2630

2731
type passthroughBuilder struct{}
2832

2933
func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
34+
if target.Endpoint == "" && opts.Dialer == nil {
35+
return nil, errors.New("passthrough: received empty target in Build()")
36+
}
3037
r := &passthroughResolver{
3138
target: target,
3239
cc: cc,

0 commit comments

Comments
 (0)
Please sign in to comment.