You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Alex Kaiser (Jira)" <ji...@apache.org> on 2020/04/04 18:23:00 UTC

[jira] [Updated] (WW-5065) AbstractMatcher adds values to the map passed into replaceParameters

     [ https://issues.apache.org/jira/browse/WW-5065?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alex Kaiser updated WW-5065:
----------------------------
    Description: 
There is a bug with the AbstractMatcher#replaceParameters method in struts/core/src/main/java/com/opensymphony/xwork2/config/impl/AbstractMatcher.java (currently lines 153-170). As the function currently works it will return a map that has more keys than the "orig" map that is passed into it. For example, assume that I have the following config defined in my struts.xml file:
{code:java}
<package name="test" namespace="/test">
  <action name="{paramOne}/{paramTwo} class="org.MyActionClass" method="execute">
    <result name="success" type="stream">
      <param name="inputName">random</param>
    </result>
  </action>
</package>{code}
If you send a request to "/test/uno/dos", this will trigger code in ActionConfigMatcher (lines 95-103) that will construct the ResultConfig objects to be used later on. At one point you are going to be making a call to AbstractMatcher#replaceParameters with something that looks like the following:

orig:
   "inputName" -> "random"

vars:
   "0" -> "uno/dos"
   "paramOne" -> "uno"
   "1" -> "uno"
   "paramTwo" -> "dos"
   "2" -> "dos"

The result of this will be a map that looks like:
   "inputName" -> "random"
   "paramOne" -> "uno"
   "paramTwo" -> "dos"

The bug is that "paramOne" and "paramTwo" should not be in the return map.

For the most part this but won't cause any problems but it will cause some performance problems in certain situations when trying to set these parameters on the results objects that aren't expecting them.

  was:
There is a bug with the AbstractMatcher#replaceParameters method in struts/core/src/main/java/com/opensymphony/xwork2/config/impl/AbstractMatcher.java (currently lines 153-170). As the function currently works it will return a map that has more keys than the "orig" map that is passed into it. For example, assume that I have the following config defined in my struts.xml file:
{code:java}
<package name="test" namespace="/test">
  <action name="{paramOne}/{paramTwo} class="org.MyActionClass"
method="execute">
    <result name="success" type="stream">
      <param name="inputName">random</param>
    </result>
  </action>
</package>{code}
If you send a request to "/test/uno/dos", this will trigger code in ActionConfigMatcher (lines 95-103) that will construct the ResultConfig objects to be used later on. At one point you are going to be making a call to AbstractMatcher#replaceParameters with something that looks like the following:

orig:
  "inputName" -> "random"

vars:
  "0" -> "uno/dos"
  "paramOne" -> "uno"
  "1" -> "uno"
  "paramTwo" -> "dos"
  "2" -> "dos"

The result of this will be a map that looks like:
  "inputName" -> "random"
  "paramOne" -> "uno"
  "paramTwo" -> "dos"

The bug is that "paramOne" and "paramTwo" should not be in the return map.

For the most part this but won't cause any problems but it will cause some performance problems in certain situations when trying to set these parameters on the results objects that aren't expecting them.


> AbstractMatcher adds values to the map passed into replaceParameters
> --------------------------------------------------------------------
>
>                 Key: WW-5065
>                 URL: https://issues.apache.org/jira/browse/WW-5065
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.5.22
>            Reporter: Alex Kaiser
>            Priority: Minor
>
> There is a bug with the AbstractMatcher#replaceParameters method in struts/core/src/main/java/com/opensymphony/xwork2/config/impl/AbstractMatcher.java (currently lines 153-170). As the function currently works it will return a map that has more keys than the "orig" map that is passed into it. For example, assume that I have the following config defined in my struts.xml file:
> {code:java}
> <package name="test" namespace="/test">
>   <action name="{paramOne}/{paramTwo} class="org.MyActionClass" method="execute">
>     <result name="success" type="stream">
>       <param name="inputName">random</param>
>     </result>
>   </action>
> </package>{code}
> If you send a request to "/test/uno/dos", this will trigger code in ActionConfigMatcher (lines 95-103) that will construct the ResultConfig objects to be used later on. At one point you are going to be making a call to AbstractMatcher#replaceParameters with something that looks like the following:
> orig:
>    "inputName" -> "random"
> vars:
>    "0" -> "uno/dos"
>    "paramOne" -> "uno"
>    "1" -> "uno"
>    "paramTwo" -> "dos"
>    "2" -> "dos"
> The result of this will be a map that looks like:
>    "inputName" -> "random"
>    "paramOne" -> "uno"
>    "paramTwo" -> "dos"
> The bug is that "paramOne" and "paramTwo" should not be in the return map.
> For the most part this but won't cause any problems but it will cause some performance problems in certain situations when trying to set these parameters on the results objects that aren't expecting them.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)