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;
}
/**