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

Lukasz Lenart updated WW-3529:
------------------------------
    Description: 
The com.opensymphony.xwork2.util.NamedVariablePatternMatcher class has a bug in 
the {{compilePattern(String)}} method. The purpose of the method is to compile 
patterns such as {{"action/\{foo}"}} to a regular expression Pattern and 
extract the variable names that match each group in the regex.  In the example 
given and the 2.2.1 code base, the pattern will be compiled as 
{{"action/([^/]+)"}}.  However, if the pattern includes characters that have 
special meaning to Java's regular expression engine, they are currently not 
being escaped.

For example, the pattern "action.{format}" is being compiled to 
{{"action.([^/]+)"}} which correctly matches {{"action.html"}} but also 
{{"actionK.html"}} or any other character because the {{'.'}} is not escaped.  
The bug really bites when a pattern like {{"{name}.{format}"}} is used.  This 
will be compiled to {{"([^/]+).([^/]+)"}} which will match {{"cars.html"}} but 
not the way you expect.  Because of greediness, it will set {{name = 
"cars.ht"}} and {{format = "l"}}.

I will submit a patch to fix this behavior on the next screen.

  was:
The com.opensymphony.xwork2.util.NamedVariablePatternMatcher class has a bug in 
the {{compilePattern(String)}} method. The purpose of the method is to compile 
patterns such as {{"action/{foo}"}} to a regular expression Pattern and extract 
the variable names that match each group in the regex.  In the example given 
and the 2.2.1 code base, the pattern will be compiled as {{"action/([^/]+)"}}.  
However, if the pattern includes characters that have special meaning to Java's 
regular expression engine, they are currently not being escaped.

For example, the pattern "action.{format}" is being compiled to 
{{"action.([^/]+)"}} which correctly matches {{"action.html"}} but also 
{{"actionK.html"}} or any other character because the {{'.'}} is not escaped.  
The bug really bites when a pattern like {{"{name}.{format}"}} is used.  This 
will be compiled to {{"([^/]+).([^/]+)"}} which will match {{"cars.html"}} but 
not the way you expect.  Because of greediness, it will set {{name = 
"cars.ht"}} and {{format = "l"}}.

I will submit a patch to fix this behavior on the next screen.


> NamedVariablePatternMatcher does not properly escape characters
> ---------------------------------------------------------------
>
>                 Key: WW-3529
>                 URL: https://issues.apache.org/jira/browse/WW-3529
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Other
>    Affects Versions: 2.2.1
>            Reporter: Richard Vermillion
>            Priority: Major
>             Fix For: 6.1.0
>
>         Attachments: NamedVariablePatternMatcher.patch
>
>
> The com.opensymphony.xwork2.util.NamedVariablePatternMatcher class has a bug 
> in the {{compilePattern(String)}} method. The purpose of the method is to 
> compile patterns such as {{"action/\{foo}"}} to a regular expression Pattern 
> and extract the variable names that match each group in the regex.  In the 
> example given and the 2.2.1 code base, the pattern will be compiled as 
> {{"action/([^/]+)"}}.  However, if the pattern includes characters that have 
> special meaning to Java's regular expression engine, they are currently not 
> being escaped.
> For example, the pattern "action.{format}" is being compiled to 
> {{"action.([^/]+)"}} which correctly matches {{"action.html"}} but also 
> {{"actionK.html"}} or any other character because the {{'.'}} is not escaped. 
>  The bug really bites when a pattern like {{"{name}.{format}"}} is used.  
> This will be compiled to {{"([^/]+).([^/]+)"}} which will match 
> {{"cars.html"}} but not the way you expect.  Because of greediness, it will 
> set {{name = "cars.ht"}} and {{format = "l"}}.
> I will submit a patch to fix this behavior on the next screen.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to