You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2012/02/14 17:12:03 UTC

svn commit: r1244105 - in /httpcomponents/httpclient/trunk/httpclient/src: main/java/org/apache/http/client/utils/URIUtils.java test/java/org/apache/http/client/utils/TestURIUtils.java

Author: olegk
Date: Tue Feb 14 16:12:02 2012
New Revision: 1244105

URL: http://svn.apache.org/viewvc?rev=1244105&view=rev
Log:
HTTPCLIENT-1166: more tolerant parsing logic for malformed uris with invalid authority part

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java?rev=1244105&r1=1244104&r2=1244105&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/URIUtils.java Tue Feb 14 16:12:02 2012
@@ -306,9 +306,18 @@ public class URIUtils {
                     if (host != null) {
                         int colon = host.indexOf(':');
                         if (colon >= 0) {
-                            if (colon + 1 < host.length()) {
+                            int pos = colon + 1;
+                            int len = 0;
+                            for (int i = pos; i < host.length(); i++) {
+                                if (Character.isDigit(host.charAt(i))) {
+                                    len++;
+                                } else {
+                                    break;
+                                }
+                            }
+                            if (len > 0) {
                                 try {
-                                    port = Integer.parseInt(host.substring(colon + 1));
+                                    port = Integer.parseInt(host.substring(pos, pos + len));
                                 } catch (NumberFormatException ex) {
                                 }
                             }

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java?rev=1244105&r1=1244104&r2=1244105&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestURIUtils.java Tue Feb 14 16:12:02 2012
@@ -341,9 +341,9 @@ public class TestURIUtils {
                 URIUtils.extractHost(new URI("http://local_host:8/abcd")));
 
         // URI seems to OK with missing port number
-        Assert.assertEquals(new HttpHost("localhost"),URIUtils.extractHost(
+        Assert.assertEquals(new HttpHost("localhost",-1),URIUtils.extractHost(
                 new URI("http://localhost:/abcd")));
-        Assert.assertEquals(new HttpHost("local_host"),URIUtils.extractHost(
+        Assert.assertEquals(new HttpHost("local_host",-1),URIUtils.extractHost(
                 new URI("http://local_host:/abcd")));
 
         Assert.assertEquals(new HttpHost("localhost",8080),
@@ -361,8 +361,10 @@ public class TestURIUtils {
 
         Assert.assertEquals(new HttpHost("localhost",8080),
                 URIUtils.extractHost(new URI("http://localhost:8080/;sessionid=stuff/abcd")));
-        Assert.assertEquals(new HttpHost("localhost",-1),
+        Assert.assertEquals(new HttpHost("localhost",8080),
                 URIUtils.extractHost(new URI("http://localhost:8080;sessionid=stuff/abcd")));
+        Assert.assertEquals(new HttpHost("localhost",-1),
+                URIUtils.extractHost(new URI("http://localhost:;sessionid=stuff/abcd")));
     }
 
 }