WW-4448 Strips params and replaces spaces
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/0f44e11c Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/0f44e11c Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/0f44e11c Branch: refs/heads/master Commit: 0f44e11cd1f3cff51ed4a2a10dec593d8822ade2 Parents: e3428c5 Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Wed Jan 21 08:46:49 2015 +0100 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Wed Jan 21 08:46:49 2015 +0100 ---------------------------------------------------------------------- .../dispatcher/ServletRedirectResult.java | 6 +++- .../dispatcher/ServletRedirectResultTest.java | 30 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/0f44e11c/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java index b6cd282..60f5584 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/ServletRedirectResult.java @@ -272,7 +272,11 @@ public class ServletRedirectResult extends StrutsResultSupport implements Reflec */ protected boolean isPathUrl(String url) { try { - URI uri = URI.create(url); + String rawUrl = url; + if (url.contains("?")) { + rawUrl = url.substring(0, url.indexOf("?")); + } + URI uri = URI.create(rawUrl); if (uri.isAbsolute()) { URL validUrl = uri.toURL(); if (LOG.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/struts/blob/0f44e11c/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java b/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java index 56cfe9d..ab40dfc 100644 --- a/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java +++ b/core/src/test/java/org/apache/struts2/dispatcher/ServletRedirectResultTest.java @@ -100,6 +100,36 @@ public class ServletRedirectResultTest extends StrutsInternalTestCase implements } } + public void testFullUrlRedirectWithSpaces() { + view.setLocation("http://localhost/bar/foo some.pdf"); + responseMock.expectAndReturn("encodeRedirectURL", C.args(C.eq("http://localhost/bar/foo some.pdf")), "http://localhost/bar/foo some.pdf"); + responseMock.expect("sendRedirect", C.args(C.eq("http://localhost/bar/foo some.pdf"))); + + try { + view.execute(ai); + requestMock.verify(); + responseMock.verify(); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } + } + + public void testFullUrlRedirectWithParams() { + view.setLocation("http://localhost/bar/foo.action?param=1¶m 2=3"); + responseMock.expectAndReturn("encodeRedirectURL", C.args(C.eq("http://localhost/bar/foo.action?param=1¶m 2=3")), "http://localhost/bar/foo.action?param=1¶m 2=3"); + responseMock.expect("sendRedirect", C.args(C.eq("http://localhost/bar/foo.action?param=1¶m 2=3"))); + + try { + view.execute(ai); + requestMock.verify(); + responseMock.verify(); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } + } + public void testAbsoluteRedirect303() { view.setLocation("/bar/foo.jsp"); view.setStatusCode(303);