diff --git a/api/src/main/java/org/asynchttpclient/util/AsyncHttpProviderUtils.java b/api/src/main/java/org/asynchttpclient/util/AsyncHttpProviderUtils.java index 386319b2a9..c07ed5a6f0 100644 --- a/api/src/main/java/org/asynchttpclient/util/AsyncHttpProviderUtils.java +++ b/api/src/main/java/org/asynchttpclient/util/AsyncHttpProviderUtils.java @@ -61,6 +61,10 @@ public final static URI createUri(String u) { return URI.create(u + "/"); } + if (uri.getHost() == null) { + throw new IllegalArgumentException("The URI host, of the URI " + uri + ", must be non-null."); + } + return uri; } diff --git a/api/src/main/java/org/asynchttpclient/util/ProxyUtils.java b/api/src/main/java/org/asynchttpclient/util/ProxyUtils.java index b48f7c7535..9174778bd3 100644 --- a/api/src/main/java/org/asynchttpclient/util/ProxyUtils.java +++ b/api/src/main/java/org/asynchttpclient/util/ProxyUtils.java @@ -113,7 +113,8 @@ public static boolean avoidProxy(final ProxyServer proxyServer, final Request re */ public static boolean avoidProxy(final ProxyServer proxyServer, final String target) { if (proxyServer != null) { - final String targetHost = target.toLowerCase(Locale.ENGLISH); + final String targetHost = (target != null) ? + target.toLowerCase(Locale.ENGLISH) : ""; List nonProxyHosts = proxyServer.getNonProxyHosts(); diff --git a/api/src/test/java/org/asynchttpclient/util/AsyncHttpProviderUtilsTest.java b/api/src/test/java/org/asynchttpclient/util/AsyncHttpProviderUtilsTest.java index 06ab8fbc12..669003c220 100644 --- a/api/src/test/java/org/asynchttpclient/util/AsyncHttpProviderUtilsTest.java +++ b/api/src/test/java/org/asynchttpclient/util/AsyncHttpProviderUtilsTest.java @@ -13,6 +13,7 @@ package org.asynchttpclient.util; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.fail; import org.testng.annotations.Test; @@ -44,4 +45,14 @@ public void getRedirectUriShouldHandleRelativeLocation() { URI uri = AsyncHttpProviderUtils.getRedirectUri(URI.create("http://www.ebay.de/"), url); assertEquals(uri.toString(), "http://www.ebay.de/sch/sis.html;jsessionid=92D73F80262E3EBED7E115ED01035DDA?_nkw=FSC%20Lifebook%20E8310%20Core2Duo%20T8100%202%201GHz%204GB%20DVD%20RW&_itemId=150731406505"); } + + @Test(groups = "fast") + public void createUriFailsWithBadHost() throws Exception { + try { + final String BAD_HOST_URL = "http:///"; + URI uri = AsyncHttpProviderUtils.createUri(BAD_HOST_URL); + fail("Expected IllegalArgumentException for url: " + BAD_HOST_URL); + } catch (IllegalArgumentException ex) { + } + } } diff --git a/api/src/test/java/org/asynchttpclient/util/ProxyUtilsTest.java b/api/src/test/java/org/asynchttpclient/util/ProxyUtilsTest.java index fdcb8884bd..19db97cfa7 100644 --- a/api/src/test/java/org/asynchttpclient/util/ProxyUtilsTest.java +++ b/api/src/test/java/org/asynchttpclient/util/ProxyUtilsTest.java @@ -44,5 +44,11 @@ public void testBasics() { proxyServer = new ProxyServer("foo", 1234); proxyServer.addNonProxyHost("*.somewhere.org"); assertFalse(ProxyUtils.avoidProxy(proxyServer, req)); + + // shouldn't crash + req = new RequestBuilder("GET").setUrl("http://badhost/foo").build(); + proxyServer = new ProxyServer("foo", 1234); + proxyServer.addNonProxyHost("*.somewhere.org"); + assertFalse(ProxyUtils.avoidProxy(proxyServer, req)); } }