From 2562ef7cbebe5eb4345cdde6323aeb0113c3f86c Mon Sep 17 00:00:00 2001 From: joymufeng Date: Sun, 26 Jun 2016 17:16:12 +0800 Subject: [PATCH] Fix a bug of DnsNameResolver while working with NoopDnsCache. Motivation: If DnsNameResolver works with NoopDnsCache, IndexOutOfBoundsException will be thrown. Modifications: Test if the result of DnsNameResolver.get(hostname) is empty before accessing it's elements. --- .../io/netty/resolver/dns/DnsNameResolver.java | 4 ++-- .../netty/resolver/dns/DnsNameResolverTest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java index a2d8101f81..9fed94cbf1 100644 --- a/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java +++ b/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java @@ -337,7 +337,7 @@ public class DnsNameResolver extends InetNameResolver { Promise promise, DnsCache resolveCache) { final List cachedEntries = resolveCache.get(hostname); - if (cachedEntries == null) { + if (cachedEntries == null || cachedEntries.isEmpty()) { return false; } @@ -443,7 +443,7 @@ public class DnsNameResolver extends InetNameResolver { Promise> promise, DnsCache resolveCache) { final List cachedEntries = resolveCache.get(hostname); - if (cachedEntries == null) { + if (cachedEntries == null || cachedEntries.isEmpty()) { return false; } diff --git a/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java b/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java index aef6fa7609..6277553f5f 100644 --- a/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java +++ b/resolver-dns/src/test/java/io/netty/resolver/dns/DnsNameResolverTest.java @@ -278,6 +278,12 @@ public class DnsNameResolverTest { .resolvedAddressTypes(resolvedAddressTypes); } + private static DnsNameResolverBuilder newNonCachedResolver(InternetProtocolFamily... resolvedAddressTypes) { + return newResolver() + .resolveCache(NoopDnsCache.INSTANCE) + .resolvedAddressTypes(resolvedAddressTypes); + } + @BeforeClass public static void init() throws Exception { dnsServer.start(); @@ -349,6 +355,16 @@ public class DnsNameResolverTest { } } + @Test + public void testNonCachedResolve() throws Exception { + DnsNameResolver resolver = newNonCachedResolver(InternetProtocolFamily.IPv4).build(); + try { + testResolve0(resolver, EXCLUSIONS_RESOLVE_A); + } finally { + resolver.close(); + } + } + private static Map testResolve0(DnsNameResolver resolver, Set excludedDomains) throws InterruptedException {