Author: markt
Date: Mon Feb 24 11:18:37 2014
New Revision: 1571245
URL: http://svn.apache.org/r1571245
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56179
Re-generate parser
Add some test cases
Modified:
tomcat/trunk/java/org/apache/el/parser/ELParser.java
tomcat/trunk/test/org/apache/el/parser/TestELParser.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParser.java?rev=1571245&r1=1571244&r2=1571245&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/ELParser.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/ELParser.java Mon Feb 24 11:18:37
2014
@@ -222,7 +222,7 @@ public class ELParser/*@bgen(jjtree)*/im
* Assignment
*/
final public void Assignment() throws ParseException {
- if (jj_2_2(3)) {
+ if (jj_2_2(4)) {
LambdaExpression();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1529,7 +1529,7 @@ public class ELParser/*@bgen(jjtree)*/im
* For Grouped Operations, Identifiers, and Functions
*/
final public void NonLiteral() throws ParseException {
- if (jj_2_6(3)) {
+ if (jj_2_6(5)) {
LambdaExpressionOrInvocation();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2084,7 +2084,7 @@ public class ELParser/*@bgen(jjtree)*/im
finally { jj_save(7, xla); }
}
- private boolean jj_3R_40() {
+ private boolean jj_3R_41() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(39)) {
@@ -2094,47 +2094,53 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_39() {
- if (jj_3R_43()) return true;
+ private boolean jj_3R_30() {
+ if (jj_3R_22()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_40() {
+ if (jj_3R_44()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_44()) { jj_scanpos = xsp; break; }
+ if (jj_3R_45()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_106() {
- if (jj_3R_35()) return true;
+ private boolean jj_3R_107() {
+ if (jj_3R_36()) return true;
return false;
}
- private boolean jj_3R_104() {
- if (jj_3R_106()) return true;
+ private boolean jj_3R_105() {
+ if (jj_3R_107()) return true;
return false;
}
- private boolean jj_3R_42() {
+ private boolean jj_3R_43() {
if (jj_scan_token(COMMA)) return true;
+ if (jj_3R_38()) return true;
return false;
}
- private boolean jj_3R_33() {
- if (jj_3R_39()) return true;
+ private boolean jj_3R_34() {
+ if (jj_3R_40()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_40()) { jj_scanpos = xsp; break; }
+ if (jj_3R_41()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_36() {
+ private boolean jj_3R_37() {
if (jj_scan_token(COMMA)) return true;
return false;
}
- private boolean jj_3R_34() {
+ private boolean jj_3R_35() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(41)) {
@@ -2144,26 +2150,26 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_98() {
+ private boolean jj_3R_99() {
if (jj_scan_token(START_SET_OR_MAP)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_104()) jj_scanpos = xsp;
+ if (jj_3R_105()) jj_scanpos = xsp;
if (jj_scan_token(RBRACE)) return true;
return false;
}
- private boolean jj_3R_103() {
- if (jj_3R_35()) return true;
+ private boolean jj_3R_104() {
+ if (jj_3R_36()) return true;
return false;
}
private boolean jj_3R_29() {
- if (jj_3R_33()) return true;
+ if (jj_3R_34()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_34()) { jj_scanpos = xsp; break; }
+ if (jj_3R_35()) { jj_scanpos = xsp; break; }
}
return false;
}
@@ -2175,31 +2181,31 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_97() {
+ private boolean jj_3R_98() {
if (jj_scan_token(LBRACK)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_103()) jj_scanpos = xsp;
+ if (jj_3R_104()) jj_scanpos = xsp;
if (jj_scan_token(RBRACK)) return true;
return false;
}
- private boolean jj_3R_38() {
- if (jj_3R_37()) return true;
+ private boolean jj_3R_39() {
+ if (jj_3R_38()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_42()) { jj_scanpos = xsp; break; }
+ if (jj_3R_43()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_30() {
- if (jj_3R_35()) return true;
+ private boolean jj_3R_31() {
+ if (jj_3R_36()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_36()) { jj_scanpos = xsp; break; }
+ if (jj_3R_37()) { jj_scanpos = xsp; break; }
}
return false;
}
@@ -2223,7 +2229,7 @@ public class ELParser/*@bgen(jjtree)*/im
if (jj_scan_token(START_SET_OR_MAP)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_30()) jj_scanpos = xsp;
+ if (jj_3R_31()) jj_scanpos = xsp;
if (jj_scan_token(RBRACE)) return true;
return false;
}
@@ -2248,22 +2254,22 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_32() {
+ private boolean jj_3R_33() {
if (jj_scan_token(LPAREN)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_38()) jj_scanpos = xsp;
+ if (jj_3R_39()) jj_scanpos = xsp;
if (jj_scan_token(RPAREN)) return true;
return false;
}
- private boolean jj_3R_88() {
- if (jj_3R_98()) return true;
+ private boolean jj_3R_89() {
+ if (jj_3R_99()) return true;
return false;
}
- private boolean jj_3R_87() {
- if (jj_3R_97()) return true;
+ private boolean jj_3R_88() {
+ if (jj_3R_98()) return true;
return false;
}
@@ -2271,6 +2277,13 @@ public class ELParser/*@bgen(jjtree)*/im
if (jj_scan_token(LPAREN)) return true;
if (jj_3R_27()) return true;
if (jj_scan_token(ARROW)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3_4()) {
+ jj_scanpos = xsp;
+ if (jj_3R_30()) return true;
+ }
+ if (jj_scan_token(RPAREN)) return true;
return false;
}
@@ -2279,19 +2292,19 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_86() {
- if (jj_3R_37()) return true;
+ private boolean jj_3R_87() {
+ if (jj_3R_38()) return true;
return false;
}
- private boolean jj_3R_85() {
- if (jj_3R_96()) return true;
+ private boolean jj_3R_86() {
+ if (jj_3R_97()) return true;
return false;
}
- private boolean jj_3R_84() {
+ private boolean jj_3R_85() {
if (jj_scan_token(LPAREN)) return true;
- if (jj_3R_35()) return true;
+ if (jj_3R_36()) return true;
return false;
}
@@ -2300,22 +2313,22 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_76() {
+ private boolean jj_3R_77() {
Token xsp;
xsp = jj_scanpos;
if (jj_3_6()) {
jj_scanpos = xsp;
- if (jj_3R_84()) {
- jj_scanpos = xsp;
if (jj_3R_85()) {
jj_scanpos = xsp;
if (jj_3R_86()) {
jj_scanpos = xsp;
+ if (jj_3R_87()) {
+ jj_scanpos = xsp;
if (jj_3_8()) {
jj_scanpos = xsp;
- if (jj_3R_87()) {
+ if (jj_3R_88()) {
jj_scanpos = xsp;
- if (jj_3R_88()) return true;
+ if (jj_3R_89()) return true;
}
}
}
@@ -2325,17 +2338,17 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_31() {
- if (jj_3R_37()) return true;
+ private boolean jj_3R_32() {
+ if (jj_3R_38()) return true;
return false;
}
private boolean jj_3R_27() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_31()) {
+ if (jj_3R_32()) {
jj_scanpos = xsp;
- if (jj_3R_32()) return true;
+ if (jj_3R_33()) return true;
}
return false;
}
@@ -2346,7 +2359,7 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_105() {
+ private boolean jj_3R_106() {
if (jj_scan_token(LPAREN)) return true;
return false;
}
@@ -2363,12 +2376,12 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_45() {
+ private boolean jj_3R_46() {
if (jj_scan_token(SEMICOLON)) return true;
return false;
}
- private boolean jj_3R_90() {
+ private boolean jj_3R_91() {
if (jj_scan_token(LBRACK)) return true;
return false;
}
@@ -2383,8 +2396,8 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_78() {
- if (jj_3R_90()) return true;
+ private boolean jj_3R_79() {
+ if (jj_3R_91()) return true;
return false;
}
@@ -2403,131 +2416,131 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_89() {
+ private boolean jj_3R_90() {
if (jj_scan_token(DOT)) return true;
return false;
}
- private boolean jj_3R_41() {
+ private boolean jj_3R_42() {
if (jj_3R_20()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_45()) { jj_scanpos = xsp; break; }
+ if (jj_3R_46()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_77() {
- if (jj_3R_89()) return true;
+ private boolean jj_3R_78() {
+ if (jj_3R_90()) return true;
return false;
}
- private boolean jj_3R_74() {
+ private boolean jj_3R_75() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_77()) {
+ if (jj_3R_78()) {
jj_scanpos = xsp;
- if (jj_3R_78()) return true;
+ if (jj_3R_79()) return true;
}
return false;
}
- private boolean jj_3R_35() {
- if (jj_3R_41()) return true;
+ private boolean jj_3R_36() {
+ if (jj_3R_42()) return true;
return false;
}
- private boolean jj_3R_71() {
- if (jj_3R_74()) return true;
+ private boolean jj_3R_72() {
+ if (jj_3R_75()) return true;
return false;
}
- private boolean jj_3R_73() {
- if (jj_3R_76()) return true;
+ private boolean jj_3R_74() {
+ if (jj_3R_77()) return true;
return false;
}
- private boolean jj_3R_70() {
+ private boolean jj_3R_71() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_72()) {
+ if (jj_3R_73()) {
jj_scanpos = xsp;
- if (jj_3R_73()) return true;
+ if (jj_3R_74()) return true;
}
return false;
}
- private boolean jj_3R_72() {
- if (jj_3R_75()) return true;
+ private boolean jj_3R_73() {
+ if (jj_3R_76()) return true;
return false;
}
- private boolean jj_3R_69() {
- if (jj_3R_70()) return true;
+ private boolean jj_3R_70() {
+ if (jj_3R_71()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_71()) { jj_scanpos = xsp; break; }
+ if (jj_3R_72()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_95() {
+ private boolean jj_3R_96() {
if (jj_scan_token(NULL)) return true;
return false;
}
- private boolean jj_3R_65() {
- if (jj_3R_69()) return true;
+ private boolean jj_3R_66() {
+ if (jj_3R_70()) return true;
return false;
}
- private boolean jj_3R_64() {
+ private boolean jj_3R_65() {
if (jj_scan_token(EMPTY)) return true;
- if (jj_3R_58()) return true;
+ if (jj_3R_59()) return true;
return false;
}
- private boolean jj_3R_63() {
+ private boolean jj_3R_64() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(37)) {
jj_scanpos = xsp;
if (jj_scan_token(38)) return true;
}
- if (jj_3R_58()) return true;
+ if (jj_3R_59()) return true;
return false;
}
- private boolean jj_3R_58() {
+ private boolean jj_3R_59() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_62()) {
- jj_scanpos = xsp;
if (jj_3R_63()) {
jj_scanpos = xsp;
if (jj_3R_64()) {
jj_scanpos = xsp;
- if (jj_3R_65()) return true;
+ if (jj_3R_65()) {
+ jj_scanpos = xsp;
+ if (jj_3R_66()) return true;
}
}
}
return false;
}
- private boolean jj_3R_62() {
+ private boolean jj_3R_63() {
if (jj_scan_token(MINUS)) return true;
- if (jj_3R_58()) return true;
+ if (jj_3R_59()) return true;
return false;
}
- private boolean jj_3R_94() {
+ private boolean jj_3R_95() {
if (jj_scan_token(STRING_LITERAL)) return true;
return false;
}
- private boolean jj_3R_68() {
+ private boolean jj_3R_69() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(51)) {
@@ -2537,12 +2550,12 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_93() {
+ private boolean jj_3R_94() {
if (jj_scan_token(INTEGER_LITERAL)) return true;
return false;
}
- private boolean jj_3R_67() {
+ private boolean jj_3R_68() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(49)) {
@@ -2552,95 +2565,100 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_59() {
+ private boolean jj_3R_60() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_66()) {
- jj_scanpos = xsp;
if (jj_3R_67()) {
jj_scanpos = xsp;
- if (jj_3R_68()) return true;
+ if (jj_3R_68()) {
+ jj_scanpos = xsp;
+ if (jj_3R_69()) return true;
}
}
return false;
}
- private boolean jj_3R_66() {
+ private boolean jj_3R_67() {
if (jj_scan_token(MULT)) return true;
return false;
}
- private boolean jj_3R_56() {
- if (jj_3R_58()) return true;
+ private boolean jj_3R_57() {
+ if (jj_3R_59()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_59()) { jj_scanpos = xsp; break; }
+ if (jj_3R_60()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_92() {
+ private boolean jj_3R_93() {
if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
return false;
}
- private boolean jj_3R_61() {
+ private boolean jj_3R_62() {
if (jj_scan_token(MINUS)) return true;
return false;
}
- private boolean jj_3R_100() {
+ private boolean jj_3R_101() {
if (jj_scan_token(FALSE)) return true;
return false;
}
- private boolean jj_3R_57() {
+ private boolean jj_3R_58() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_60()) {
+ if (jj_3R_61()) {
jj_scanpos = xsp;
- if (jj_3R_61()) return true;
+ if (jj_3R_62()) return true;
}
return false;
}
- private boolean jj_3R_60() {
+ private boolean jj_3R_61() {
if (jj_scan_token(PLUS)) return true;
return false;
}
- private boolean jj_3R_99() {
+ private boolean jj_3R_100() {
if (jj_scan_token(TRUE)) return true;
return false;
}
- private boolean jj_3R_91() {
+ private boolean jj_3R_92() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_99()) {
+ if (jj_3R_100()) {
jj_scanpos = xsp;
- if (jj_3R_100()) return true;
+ if (jj_3R_101()) return true;
}
return false;
}
- private boolean jj_3R_50() {
- if (jj_3R_56()) return true;
+ private boolean jj_3R_51() {
+ if (jj_3R_57()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_57()) { jj_scanpos = xsp; break; }
+ if (jj_3R_58()) { jj_scanpos = xsp; break; }
}
return false;
}
+ private boolean jj_3R_84() {
+ if (jj_3R_96()) return true;
+ return false;
+ }
+
private boolean jj_3R_83() {
if (jj_3R_95()) return true;
return false;
}
- private boolean jj_3R_51() {
+ private boolean jj_3R_52() {
if (jj_scan_token(CONCAT)) return true;
return false;
}
@@ -2655,28 +2673,23 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_80() {
- if (jj_3R_92()) return true;
- return false;
- }
-
- private boolean jj_3R_101() {
+ private boolean jj_3R_102() {
if (jj_scan_token(COLON)) return true;
return false;
}
- private boolean jj_3R_75() {
+ private boolean jj_3R_76() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_79()) {
- jj_scanpos = xsp;
if (jj_3R_80()) {
jj_scanpos = xsp;
if (jj_3R_81()) {
jj_scanpos = xsp;
if (jj_3R_82()) {
jj_scanpos = xsp;
- if (jj_3R_83()) return true;
+ if (jj_3R_83()) {
+ jj_scanpos = xsp;
+ if (jj_3R_84()) return true;
}
}
}
@@ -2684,27 +2697,27 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_79() {
- if (jj_3R_91()) return true;
+ private boolean jj_3R_80() {
+ if (jj_3R_92()) return true;
return false;
}
- private boolean jj_3R_46() {
- if (jj_3R_50()) return true;
+ private boolean jj_3R_47() {
+ if (jj_3R_51()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_51()) { jj_scanpos = xsp; break; }
+ if (jj_3R_52()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_102() {
- if (jj_3R_105()) return true;
+ private boolean jj_3R_103() {
+ if (jj_3R_106()) return true;
return false;
}
- private boolean jj_3R_55() {
+ private boolean jj_3R_56() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(29)) {
@@ -2714,7 +2727,7 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_54() {
+ private boolean jj_3R_55() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(31)) {
@@ -2724,7 +2737,7 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_53() {
+ private boolean jj_3R_54() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(25)) {
@@ -2734,23 +2747,23 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_47() {
+ private boolean jj_3R_48() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_52()) {
- jj_scanpos = xsp;
if (jj_3R_53()) {
jj_scanpos = xsp;
if (jj_3R_54()) {
jj_scanpos = xsp;
- if (jj_3R_55()) return true;
+ if (jj_3R_55()) {
+ jj_scanpos = xsp;
+ if (jj_3R_56()) return true;
}
}
}
return false;
}
- private boolean jj_3R_52() {
+ private boolean jj_3R_53() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(27)) {
@@ -2760,30 +2773,30 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_96() {
+ private boolean jj_3R_97() {
if (jj_scan_token(IDENTIFIER)) return true;
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_101()) jj_scanpos = xsp;
- if (jj_3R_102()) return true;
+ if (jj_3R_102()) jj_scanpos = xsp;
+ if (jj_3R_103()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_102()) { jj_scanpos = xsp; break; }
+ if (jj_3R_103()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_43() {
- if (jj_3R_46()) return true;
+ private boolean jj_3R_44() {
+ if (jj_3R_47()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_47()) { jj_scanpos = xsp; break; }
+ if (jj_3R_48()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_49() {
+ private boolean jj_3R_50() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(35)) {
@@ -2793,17 +2806,17 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_44() {
+ private boolean jj_3R_45() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_48()) {
+ if (jj_3R_49()) {
jj_scanpos = xsp;
- if (jj_3R_49()) return true;
+ if (jj_3R_50()) return true;
}
return false;
}
- private boolean jj_3R_48() {
+ private boolean jj_3R_49() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(33)) {
@@ -2818,7 +2831,7 @@ public class ELParser/*@bgen(jjtree)*/im
return false;
}
- private boolean jj_3R_37() {
+ private boolean jj_3R_38() {
if (jj_scan_token(IDENTIFIER)) return true;
return false;
}
Modified: tomcat/trunk/test/org/apache/el/parser/TestELParser.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/parser/TestELParser.java?rev=1571245&r1=1571244&r2=1571245&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/parser/TestELParser.java (original)
+++ tomcat/trunk/test/org/apache/el/parser/TestELParser.java Mon Feb 24
11:18:37 2014
@@ -104,6 +104,102 @@ public class TestELParser {
}
+ @Test
+ public void bug56179a() {
+ doTestBug56179(0, "test == true");
+ }
+
+ @Test
+ public void bug56179b() {
+ doTestBug56179(1, "test == true");
+ }
+
+ @Test
+ public void bug56179c() {
+ doTestBug56179(2, "test == true");
+ }
+
+ @Test
+ public void bug56179d() {
+ doTestBug56179(3, "test == true");
+ }
+
+ @Test
+ public void bug56179e() {
+ doTestBug56179(4, "test == true");
+ }
+
+ @Test
+ public void bug56179f() {
+ doTestBug56179(5, "test == true");
+ }
+
+ @Test
+ public void bug56179g() {
+ doTestBug56179(0, "(test) == true");
+ }
+
+ @Test
+ public void bug56179h() {
+ doTestBug56179(1, "(test) == true");
+ }
+
+ @Test
+ public void bug56179i() {
+ doTestBug56179(2, "(test) == true");
+ }
+
+ @Test
+ public void bug56179j() {
+ doTestBug56179(3, "(test) == true");
+ }
+
+ @Test
+ public void bug56179k() {
+ doTestBug56179(4, "(test) == true");
+ }
+
+ @Test
+ public void bug56179l() {
+ doTestBug56179(5, "(test) == true");
+ }
+
+ @Test
+ public void bug56179m() {
+ doTestBug56179(5, "((test)) == true");
+ }
+
+ @Test
+ public void bug56179n() {
+ doTestBug56179(5, "(((test))) == true");
+ }
+
+ private void doTestBug56179(int parenthesesCount, String innerExpr) {
+ ExpressionFactory factory = ExpressionFactory.newInstance();
+ ELContext context = new ELContextImpl(factory);
+
+ ValueExpression var =
+ factory.createValueExpression(Boolean.TRUE, Boolean.class);
+ context.getVariableMapper().setVariable("test", var);
+
+ StringBuilder expr = new StringBuilder();
+ expr.append("${");
+ for (int i = 0; i < parenthesesCount; i++) {
+ expr.append("(");
+ }
+ expr.append(innerExpr);
+ for (int i = 0; i < parenthesesCount; i++) {
+ expr.append(")");
+ }
+ expr.append("}");
+ ValueExpression ve = factory.createValueExpression(
+ context, expr.toString(), String.class);
+
+ String result = (String) ve.getValue(context);
+ assertEquals("true", result);
+ }
+
+
private void testExpression(String expression, String expected) {
ExpressionFactory factory = ExpressionFactory.newInstance();
ELContext context = new ELContextImpl(factory);
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1571245&r1=1571244&r2=1571245&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Feb 24 11:18:37 2014
@@ -95,6 +95,10 @@
Change the default compiler source and compiler target versions to 1.7
since Tomcat 8 requires a minimum of Java 7. (markt)
</fix>
+ <fix>
+ <bug>56179</bug>: Fix parsing of EL expressions that contain
unnecessary
+ parentheses. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="WebSocket">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]