svn commit: r1486576 - in /struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views: jsp/URLTagTest.java util/DefaultUrlHelperTest.java
Author: rgielen Date: Mon May 27 11:14:37 2013 New Revision: 1486576 URL: http://svn.apache.org/r1486576 Log: WW-4063 Testcases for double parameter evaluation problems Modified: struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java Modified: struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java?rev=1486576&r1=1486575&r2=1486576&view=diff == --- struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java (original) +++ struts/struts2/branches/STRUTS_2_3_14_X/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java Mon May 27 11:14:37 2013 @@ -21,16 +21,12 @@ package org.apache.struts2.views.jsp; -import java.io.File; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpSession; -import javax.servlet.jsp.JspWriter; - +import com.mockobjects.dynamic.Mock; +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionProxy; +import com.opensymphony.xwork2.DefaultActionInvocation; +import com.opensymphony.xwork2.DefaultActionProxyFactory; +import com.opensymphony.xwork2.inject.Container; import org.apache.struts2.ServletActionContext; import org.apache.struts2.components.URL; import org.apache.struts2.dispatcher.ApplicationMap; @@ -40,15 +36,14 @@ import org.apache.struts2.dispatcher.Ses import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.dispatcher.mapper.DefaultActionMapper; -import com.mockobjects.dynamic.Mock; -import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; -import com.opensymphony.xwork2.DefaultActionInvocation; -import com.opensymphony.xwork2.DefaultActionProxy; -import com.opensymphony.xwork2.DefaultActionProxyFactory; -import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider; -import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; -import com.opensymphony.xwork2.inject.Container; +import javax.servlet.http.HttpSession; +import javax.servlet.jsp.JspWriter; +import java.io.File; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Unit test for {@link URLTag}. @@ -619,6 +614,69 @@ public class URLTagTest extends Abstract } + public void testEmbeddedParamTagExpressionGetsEvaluatedCorrectly() throws Exception { + request.setRequestURI("/public/about"); + request.setQueryString("section=team&company=acme inc"); + + tag.setAction("team"); + tag.setIncludeParams("all"); + + tag.doStartTag(); + + Foo foo = new Foo("test"); + stack.push(foo); + + // include nested param tag + ParamTag paramTag = new ParamTag(); + paramTag.setPageContext(pageContext); + paramTag.setName("title"); + paramTag.setValue("%{title}"); + paramTag.doStartTag(); + paramTag.doEndTag(); + + tag.doEndTag(); + + assertEquals("/team.action?section=team&company=acme+inc&title=test", writer.toString()); + } + + public void testAccessToStackInternalsGetsHandledCorrectly() throws Exception { + Map params = new HashMap(); + params.put("aaa", new String[] {"1${#session[\"foo\"]='true'}"}); + params.put("aab", new String[] {"1${#session[\"bar\"]}"}); + params.put("aac", new String[] {"1${#_memberAccess[\"allowStaticMethodAccess\"]='true'}"}); + params.put("aad", new String[] {"1${#_memberAccess[\"allowStaticMethodAccess\"]}"}); + + request.setParameterMap(params); + request.setRequestURI("/public/about"); + request.setQueryString("aae${%23session[\"bar\"]}=1%24%7B%23session%5B%22bar%22%5D%7D"); + session.put("bar", "rab"); + + tag.setAction("team"); + tag.setIncludeParams("all"); + + tag.doStartTag(); + tag.doEndTag(); + + Object allowMethodAccess = stack.findValue("\u0023_memberAccess['allowStaticMethodAccess']"); + assertNotNull(allowMethodAccess); + assertEquals(Boolean.FALSE, allowMethodAccess); + + assertNull(session.get("foo")); + + assertEquals("/team.action?" + +
svn commit: r1486633 - in /struts/struts2/trunk: ./ core/src/main/java/org/apache/struts2/views/util/ core/src/test/java/org/apache/struts2/views/jsp/ core/src/test/java/org/apache/struts2/views/util/
Author: rgielen Date: Mon May 27 14:11:10 2013 New Revision: 1486633 URL: http://svn.apache.org/r1486633 Log: Merged from STRUTS_2_3_14_X Disable eval expressions [from revision 1469249] WW-4063 Improved security by making static method attribute immutable [from revision 1486054] WW-4063 Skipping unneeded translation for included parameters [from revision 1486076] WW-4063 Testcase modification after refactoring [from revision 1486164] WW-4063 Testcases for double parameter evaluation problems [from revision 1486576] Modified: struts/struts2/trunk/ (props changed) struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java Propchange: struts/struts2/trunk/ -- Merged /struts/struts2/branches/STRUTS_2_3_14_X:r1486054,1486076,1486164,1486576 Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java?rev=1486633&r1=1486632&r2=1486633&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java Mon May 27 14:11:10 2013 @@ -241,47 +241,45 @@ public class DefaultUrlHelper implements private String buildParameterSubstring(String name, String value) { StringBuilder builder = new StringBuilder(); -builder.append(translateAndEncode(name)); +builder.append(encode(name)); builder.append('='); -builder.append(translateAndEncode(value)); +builder.append(encode(value)); return builder.toString(); } -/** - * Translates any script expressions using {@link com.opensymphony.xwork2.util.TextParseUtil#translateVariables} and - * encodes the URL using {@link java.net.URLEncoder#encode} with the encoding specified in the configuration. - * - * @param input - * @return the translated and encoded string - */ -public String translateAndEncode(String input) { -String translatedInput = translateVariable(input); -try { -return URLEncoder.encode(translatedInput, encoding); -} catch (UnsupportedEncodingException e) { -if (LOG.isWarnEnabled()) { -LOG.warn("Could not encode URL parameter '#0', returning value un-encoded", input); -} -return translatedInput; -} -} - -public String translateAndDecode(String input) { -String translatedInput = translateVariable(input); -try { -return URLDecoder.decode(translatedInput, encoding); -} catch (UnsupportedEncodingException e) { -if (LOG.isWarnEnabled()) { -LOG.warn("Could not encode URL parameter '#0', returning value un-encoded", input); -} -return translatedInput; -} -} - -private String translateVariable(String input) { -ValueStack valueStack = ServletActionContext.getContext().getValueStack(); -return TextParseUtil.translateVariables(input, valueStack); -} + /** +* Encodes the URL using {@link java.net.URLEncoder#encode} with the encoding specified in the configuration. +* +* @param input the input to encode +* @return the encoded string +*/ + public String encode( String input ) { + try { + return URLEncoder.encode(input, encoding); + } catch (UnsupportedEncodingException e) { + if (LOG.isWarnEnabled()) { + LOG.warn("Could not encode URL parameter '#0', returning value un-encoded", input); + } + return input; + } + } + + /** +* Decodes the URL using {@link java.net.URLDecoder#decode(String, String)} with the encoding specified in the configuration. +* +* @param input the input to decode +* @return the encoded string +*/ + public String decode( String input ) { + try { + return URLDecoder.decode(input, encoding); + } catch (UnsupportedEncodingException e) { + if (LOG.isWarnEnabled()) { + LOG.warn("Could not decode URL parameter '#0', returning value un-decoded", input); +
[CONF] Confluence Changes in the last 24 hours
This is a daily summary of all recent changes in Confluence. - Updated Spaces: - Apache Camel (https://cwiki.apache.org/confluence/display/CAMEL) Pages - Camel 2.12.0 Release edited by bvahdat (03:46 PM) https://cwiki.apache.org/confluence/display/CAMEL/Camel+2.12.0+Release Weather edited by bvahdat (03:12 PM) https://cwiki.apache.org/confluence/display/CAMEL/Weather JSON edited by bvahdat (08:27 AM) https://cwiki.apache.org/confluence/display/CAMEL/JSON Apache Cloudstack (https://cwiki.apache.org/confluence/display/CLOUDSTACK) Pages - Enabling Storage XenMotion for XenServer edited by sateeshc (11:00 AM) https://cwiki.apache.org/confluence/display/CLOUDSTACK/Enabling+Storage+XenMotion+for+XenServer Granular Global Configuration Parameters edited by prashantkm (07:56 AM) https://cwiki.apache.org/confluence/display/CLOUDSTACK/Granular+++Global+Configuration+Parameters Stratosphere SSP Network Plugin created by ka...@stratosphere.co.jp (07:08 AM) https://cwiki.apache.org/confluence/display/CLOUDSTACK/Stratosphere+SSP+Network+Plugin Dynamic scaling of CPU and RAM edited by nitin.me...@citrix.com (06:27 AM) https://cwiki.apache.org/confluence/display/CLOUDSTACK/Dynamic+scaling+of+CPU+and+RAM Apache Flex (https://cwiki.apache.org/confluence/display/FLEX) Pages - FlexUnit Developer Documentation edited by cyrill (02:02 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Developer+Documentation FlexUnit Advanced Terminology edited by cyrill (02:02 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Advanced+Terminology FlexUnit Project Structure created by cyrill (01:58 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Project+Structure FlexUnit Continuous Integration Support edited by cyrill (01:55 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Continuous+Integration+Support FlexUnit 4 CI Sample Project Information edited by cyrill (01:55 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+4+CI+Sample+Project+Information FlexUnit Metadata edited by cyrill (01:53 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Metadata FlexUnit Test edited by cyrill (01:49 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Test FlexUnit ArrayElementType edited by cyrill (01:49 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+ArrayElementType FlexUnit FlexUnit1ClassRunner edited by cyrill (01:48 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+FlexUnit1ClassRunner FlexUnit BlockFlexUnit4ClassRunner edited by cyrill (01:47 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+BlockFlexUnit4ClassRunner FlexUnit Fluint1ClassRunner edited by cyrill (01:43 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Fluint1ClassRunner FlexUnit Suite (Runner class) edited by cyrill (01:43 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Suite+%28Runner+class%29 FlexUnit SuiteMethod edited by cyrill (01:41 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+SuiteMethod FlexUnit TheoryBlockRunner edited by cyrill (01:41 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+TheoryBlockRunner FlexUnit Sequences edited by cyrill (01:39 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Sequences FlexUnit Runners and Builders edited by cyrill (01:37 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Runners+and+Builders FlexUnit UIImpersonator edited by cyrill (01:35 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+UIImpersonator FlexUnit Custom Runners edited by cyrill (01:35 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Custom+Runners FlexUnit Writing an Async setup edited by cyrill (01:33 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Writing+an+Async+setup FlexUnit Using External Data for Parameterized Testing And Theories edited by cyrill (01:31 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Using+External+Data+for+Parameterized+Testing+And+Theories FlexUnit Parameterized Test Styles created by cyrill (01:29 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Parameterized+Test+Styles FlexUnit Terminology edited by cyrill (01:23 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Terminology FlexUnit Sorting created by cyrill (01:20 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Sorting FlexUnit Filtering created by cyrill (01:18 PM) https://cwiki.apache.org/confluence/display/FLEX/FlexUnit+Filtering FlexUnit Fluint Sequences edited by cyrill (01:11