aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorcreamsoup <jihuncho@google.com>2018-08-13 16:55:20 -0700
committerKun Zhang <zhangkun83@users.noreply.github.com>2018-08-13 16:55:20 -0700
commitba4db45e71c4dfba7654a0bc9a85131741988d16 (patch)
tree79f4ecafb12c34df01df315cc46de1105f4c5b11 /core
parent6d4841a8c22c1c53c1df71756c5459c3a9ed1af7 (diff)
downloadgrpc-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.java5
-rw-r--r--core/src/test/java/io/grpc/internal/DnsNameResolverTest.java20
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);