Merge pull request #466 from apache/WW-5056-allows-dash
[WW-5056] Accepts dashes in param names
diff --git a/core/src/main/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsChecker.java b/core/src/main/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsChecker.java
index 0489147..9b1704c 100644
--- a/core/src/main/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsChecker.java
+++ b/core/src/main/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsChecker.java
@@ -36,11 +36,11 @@
private static final Logger LOG = LogManager.getLogger(DefaultAcceptedPatternsChecker.class);
public static final String[] ACCEPTED_PATTERNS = {
- "\\w+((\\.\\w+)|(\\[\\d+])|(\\(\\d+\\))|(\\['(\\w|[\\u4e00-\\u9fa5])+'])|(\\('(\\w|[\\u4e00-\\u9fa5])+'\\)))*"
+ "\\w+((\\.\\w+)|(\\[\\d+])|(\\(\\d+\\))|(\\['(\\w-?|[\\u4e00-\\u9fa5]-?)+'])|(\\('(\\w-?|[\\u4e00-\\u9fa5]-?)+'\\)))*"
};
public static final String[] DMI_AWARE_ACCEPTED_PATTERNS = {
- "\\w+([:]?\\w+)?((\\.\\w+)|(\\[\\d+])|(\\(\\d+\\))|(\\['(\\w|[\\u4e00-\\u9fa5])+'])|(\\('(\\w|[\\u4e00-\\u9fa5])+'\\)))*([!]?\\w+)?"
+ "\\w+([:]?\\w+)?((\\.\\w+)|(\\[\\d+])|(\\(\\d+\\))|(\\['(\\w-?|[\\u4e00-\\u9fa5]-?)+'])|(\\('(\\w-?|[\\u4e00-\\u9fa5]-?)+'\\)))*([!]?\\w+)?"
};
private Set<Pattern> acceptedPatterns;
diff --git a/core/src/test/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsCheckerTest.java b/core/src/test/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsCheckerTest.java
index 1dc8d8a..7100f6c 100644
--- a/core/src/test/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsCheckerTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/security/DefaultAcceptedPatternsCheckerTest.java
@@ -57,6 +57,7 @@
add("%{#parameters.test}");
add("%{#Parameters['test']}");
add("%{#Parameters.test}");
+ add("%{#Parameters['test-1']}");
}
};
@@ -97,6 +98,35 @@
assertTrue("Param with underscore wasn't accepted!", actual.isAccepted());
}
+ public void testDashInParamName() {
+ // given
+ AcceptedPatternsChecker checker = new DefaultAcceptedPatternsChecker();
+
+ // when
+ AcceptedPatternsChecker.IsAccepted actual = checker.isAccepted("mapParam['param-1']");
+
+ // then
+ assertTrue("Param with dash wasn't accepted!", actual.isAccepted());
+
+ // when
+ actual = checker.isAccepted("mapParam['-param-1']");
+
+ // then
+ assertFalse("Param with dash was accepted!", actual.isAccepted());
+
+ // when
+ actual = checker.isAccepted("-param");
+
+ // then
+ assertFalse("Param with dash was accepted!", actual.isAccepted());
+
+ // when
+ actual = checker.isAccepted("param1-param2");
+
+ // then
+ assertFalse("Param with dash was accepted!", actual.isAccepted());
+ }
+
public void testUnderscoreInParamNameWithDmiEnabled() {
// given
AcceptedPatternsChecker checker = new DefaultAcceptedPatternsChecker(Boolean.TRUE.toString());
@@ -174,4 +204,33 @@
assertTrue("dmi isn't accepted", accepted.isAccepted());
}
-}
\ No newline at end of file
+
+ public void testDmiIsEnabledAndDash() {
+ // given
+ DefaultAcceptedPatternsChecker checker = new DefaultAcceptedPatternsChecker(Boolean.TRUE.toString());
+
+ // when
+ AcceptedPatternsChecker.IsAccepted accepted = checker.isAccepted("map['param-1']");
+
+ // then
+ assertTrue("Dash isn't accepted", accepted.isAccepted());
+
+ // when
+ accepted = checker.isAccepted("map['-param-1']");
+
+ // then
+ assertFalse("Dash was accepted", accepted.isAccepted());
+
+ // when
+ accepted = checker.isAccepted("-param");
+
+ // then
+ assertFalse("Dash was accepted", accepted.isAccepted());
+
+ // when
+ accepted = checker.isAccepted("param1-param2");
+
+ // then
+ assertFalse("Dash was accepted", accepted.isAccepted());
+ }
+}