diff options
author | creamsoup <jihuncho@google.com> | 2018-08-13 16:55:20 -0700 |
---|---|---|
committer | Kun Zhang <zhangkun83@users.noreply.github.com> | 2018-08-13 16:55:20 -0700 |
commit | ba4db45e71c4dfba7654a0bc9a85131741988d16 (patch) | |
tree | 79f4ecafb12c34df01df315cc46de1105f4c5b11 /core | |
parent | 6d4841a8c22c1c53c1df71756c5459c3a9ed1af7 (diff) | |
download | grpc-grpc-java-ba4db45e71c4dfba7654a0bc9a85131741988d16.tar.gz |
Fix errror message when DNS name is invalid. (#4751)
It used to throw NPE, since URI.create creates URI with null hostname. Now it
thorws IllegalArgumentException for invalid DNS name, NPE for null name.
Diffstat (limited to 'core')
-rw-r--r-- | core/src/main/java/io/grpc/internal/DnsNameResolver.java | 5 | ||||
-rw-r--r-- | core/src/test/java/io/grpc/internal/DnsNameResolverTest.java | 20 |
2 files changed, 23 insertions, 2 deletions
diff --git a/core/src/main/java/io/grpc/internal/DnsNameResolver.java b/core/src/main/java/io/grpc/internal/DnsNameResolver.java index 20a0834c2..ea0c42184 100644 --- a/core/src/main/java/io/grpc/internal/DnsNameResolver.java +++ b/core/src/main/java/io/grpc/internal/DnsNameResolver.java @@ -132,10 +132,11 @@ final class DnsNameResolver extends NameResolver { this.executorResource = executorResource; // Must prepend a "//" to the name when constructing a URI, otherwise it will be treated as an // opaque URI, thus the authority and host of the resulted URI would be null. - URI nameUri = URI.create("//" + name); + URI nameUri = URI.create("//" + checkNotNull(name, "name")); + Preconditions.checkArgument(nameUri.getHost() != null, "Invalid DNS name: %s", name); authority = Preconditions.checkNotNull(nameUri.getAuthority(), "nameUri (%s) doesn't have an authority", nameUri); - host = Preconditions.checkNotNull(nameUri.getHost(), "host"); + host = nameUri.getHost(); if (nameUri.getPort() == -1) { Integer defaultPort = params.get(NameResolver.Factory.PARAMS_DEFAULT_PORT); if (defaultPort != null) { diff --git a/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java b/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java index ac9054705..1afacc42c 100644 --- a/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java +++ b/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java @@ -156,6 +156,26 @@ public class DnsNameResolverTest { } @Test + public void nullDnsName() { + try { + newResolver(null, DEFAULT_PORT); + fail("Expected NullPointerException"); + } catch (NullPointerException e) { + // expected + } + } + + @Test + public void invalidDnsName_containsUnderscore() { + try { + newResolver("host_1", DEFAULT_PORT); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + @Test public void resolve() throws Exception { final List<InetAddress> answer1 = createAddressList(2); final List<InetAddress> answer2 = createAddressList(1); |