You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/05/18 11:01:21 UTC

git commit: WICKET-4561 Wicket 1.5.6 duplicates segments in absolute URLs

Updated Branches:
  refs/heads/wicket-1.5.x 1909054ea -> bc0724dcf


WICKET-4561 Wicket 1.5.6 duplicates segments in absolute URLs


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/bc0724dc
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/bc0724dc
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/bc0724dc

Branch: refs/heads/wicket-1.5.x
Commit: bc0724dcfe40a05eb6114216eb0c0604eec4eb9e
Parents: 1909054
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri May 18 11:00:23 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri May 18 11:00:23 2012 +0200

----------------------------------------------------------------------
 .../wicket/request/cycle/UrlRendererTest.java      |   45 +++++++++++++++
 .../main/java/org/apache/wicket/request/Url.java   |    5 +-
 .../org/apache/wicket/request/UrlRenderer.java     |   17 +++++-
 3 files changed, 63 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/bc0724dc/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
index 5fb3bcd..ca9e167 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
@@ -204,4 +204,49 @@ public class UrlRendererTest extends Assert
 		String fullUrl = renderer.renderFullUrl(Url.parse("/four")); // url starting with slash is considered absolute
 		assertEquals("http://www.example.com:8888/four", fullUrl);
 	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-4561
+	 * https://issues.apache.org/jira/browse/WICKET-4562
+	 */
+	@Test
+	public void renderUrlWithRelativeArgument()
+	{
+		Url baseUrl = Url.parse("one/two/three");
+		UrlRenderer renderer = new UrlRenderer(new MockWebRequest(baseUrl));
+		baseUrl.setProtocol("http");
+		baseUrl.setHost("www.example.com");
+		baseUrl.setPort(8888);
+		renderer.setBaseUrl(baseUrl);
+
+		Url newUrl = Url.parse("four");
+		newUrl.setProtocol("https");
+		String fullUrl = renderer.renderUrl(newUrl);
+		assertEquals("http://www.example.com:8888/four", fullUrl);
+
+		newUrl = Url.parse("./four");
+		newUrl.setProtocol("https");
+		fullUrl = renderer.renderUrl(newUrl);
+		assertEquals("http://www.example.com:8888/four", fullUrl);
+
+		newUrl = Url.parse("./././four");
+		newUrl.setProtocol("https");
+		fullUrl = renderer.renderUrl(newUrl);
+		assertEquals("http://www.example.com:8888/four", fullUrl);
+
+		newUrl = Url.parse("../four");
+		newUrl.setProtocol("https");
+		fullUrl = renderer.renderUrl(newUrl);
+		assertEquals("http://www.example.com:8888/four", fullUrl);
+
+		newUrl = Url.parse(".././four");
+		newUrl.setProtocol("https");
+		fullUrl = renderer.renderUrl(newUrl);
+		assertEquals("http://www.example.com:8888/four", fullUrl);
+
+		newUrl = Url.parse("../../../../four");
+		newUrl.setProtocol("https");
+		fullUrl = renderer.renderUrl(newUrl);
+		assertEquals("http://www.example.com:8888/four", fullUrl);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/bc0724dc/wicket-request/src/main/java/org/apache/wicket/request/Url.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/Url.java b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
index ecbbd17..8f9c149 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/Url.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/Url.java
@@ -1001,7 +1001,10 @@ public class Url implements Serializable
 			else if ("..".equals(relative.getSegments().get(0)))
 			{
 				relative.getSegments().remove(0);
-				getSegments().remove(getSegments().size() - 1);
+				if (getSegments().isEmpty() == false)
+				{
+					getSegments().remove(getSegments().size() - 1);
+				}
 			}
 			else
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/bc0724dc/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
index c4a1a90..5acbedd 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/UrlRenderer.java
@@ -92,14 +92,25 @@ public class UrlRenderer
 	 */
 	public String renderUrl(final Url url)
 	{
+		final String renderedUrl;
 		if (shouldRenderAsFull(url))
 		{
-			return renderFullUrl(url);
+			if (url.isAbsolute() == false)
+			{
+				String relativeUrl = renderRelativeUrl(url);
+				Url relative = Url.parse(relativeUrl, url.getCharset());
+				renderedUrl = renderFullUrl(relative);
+			}
+			else
+			{
+				renderedUrl = renderFullUrl(url);
+			}
 		}
-		else
+		else 
 		{
-			return renderRelativeUrl(url);
+			renderedUrl = renderRelativeUrl(url);
 		}
+		return renderedUrl;
 	}
 
 	/**