Author: olegk Date: Wed Jun 21 04:05:19 2006 New Revision: 415961 URL: http://svn.apache.org/viewvc?rev=415961&view=rev Log: [HTTPCLIENT-588] relative URIs with internal double-slashes ('//') misparsed
Contributed by Gordon Mohr <gojomo at archive.org> Reviewed by Oleg Kalnichevski and Roland Weber Modified: jakarta/commons/proper/httpclient/trunk/release_notes.txt jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/URI.java jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestURI.java Modified: jakarta/commons/proper/httpclient/trunk/release_notes.txt URL: http://svn.apache.org/viewvc/jakarta/commons/proper/httpclient/trunk/release_notes.txt?rev=415961&r1=415960&r2=415961&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/trunk/release_notes.txt (original) +++ jakarta/commons/proper/httpclient/trunk/release_notes.txt Wed Jun 21 04:05:19 2006 @@ -1,5 +1,8 @@ Changes toward 3.1 + * [HTTPCLIENT-588] - Fixed parsing of relative URIs with internal double-slashes ('//') + Contributed by Gordon Mohr <gojomo at archive.org> + * [HTTPCLIENT-587] - Fixed incorrect derelativizing of relative URIs with a scheme Contributed by Gordon Mohr <gojomo at archive.org> Modified: jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/URI.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/URI.java?rev=415961&r1=415960&r2=415961&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/URI.java (original) +++ jakarta/commons/proper/httpclient/trunk/src/java/org/apache/commons/httpclient/URI.java Wed Jun 21 04:05:19 2006 @@ -1919,7 +1919,8 @@ boolean isStartedFromPath = false; int atColon = tmp.indexOf(':'); int atSlash = tmp.indexOf('/'); - if (atColon <= 0 || (atSlash >= 0 && atSlash < atColon)) { + if ((atColon <= 0 && !tmp.startsWith("//")) + || (atSlash >= 0 && atSlash < atColon)) { isStartedFromPath = true; } @@ -1965,7 +1966,8 @@ if (0 <= at && at < length && tmp.charAt(at) == '/') { // Set flag _is_hier_part = true; - if (at + 2 < length && tmp.charAt(at + 1) == '/') { + if (at + 2 < length && tmp.charAt(at + 1) == '/' + && !isStartedFromPath) { // the temporary index to start the search from int next = indexFirstOf(tmp, "/?#", at + 2); if (next == -1) { Modified: jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestURI.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestURI.java?rev=415961&r1=415960&r2=415961&view=diff ============================================================================== --- jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestURI.java (original) +++ jakarta/commons/proper/httpclient/trunk/src/test/org/apache/commons/httpclient/TestURI.java Wed Jun 21 04:05:19 2006 @@ -296,4 +296,17 @@ URI derel3 = new URI(base,rel3); assertEquals("http://www.example.com/bar",derel3.toString()); } + + /** + * Verify proper handling of relative URIs with embedded double-slashes, + * like "foo//bar//baz". + * See bug http://issues.apache.org/jira/browse/HTTPCLIENT-588 + * + * @throws Exception + */ + public void testRelativeWithDoubleSlash() throws Exception { + URI rel = new URI("foo//bar//baz",true); + assertEquals("foo//bar//baz",rel.toString()); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]