Author: markt Date: Mon Apr 28 23:08:14 2014 New Revision: 1590835 URL: http://svn.apache.org/r1590835 Log: Correct the handling of back-slash escaping in the EL parser and no longer require that "\$" or "\#" must be followed by "{" in order for the back-slash escaping to take effect.
Modified: tomcat/trunk/java/org/apache/el/parser/AstLiteralExpression.java tomcat/trunk/test/org/apache/el/TestELEvaluation.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/el/parser/AstLiteralExpression.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstLiteralExpression.java?rev=1590835&r1=1590834&r2=1590835&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/AstLiteralExpression.java (original) +++ tomcat/trunk/java/org/apache/el/parser/AstLiteralExpression.java Mon Apr 28 23:08:14 2014 @@ -51,10 +51,9 @@ public final class AstLiteralExpression StringBuilder buf = new StringBuilder(size); for (int i = 0; i < size; i++) { char c = image.charAt(i); - if (c == '\\' && i + 2 < size) { + if (c == '\\' && i + 1 < size) { char c1 = image.charAt(i + 1); - char c2 = image.charAt(i + 2); - if ((c1 == '#' || c1 == '$') && c2 == '{') { + if ((c1 == '#' || c1 == '$')) { c = c1; i++; } Modified: tomcat/trunk/test/org/apache/el/TestELEvaluation.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestELEvaluation.java?rev=1590835&r1=1590834&r2=1590835&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/TestELEvaluation.java (original) +++ tomcat/trunk/test/org/apache/el/TestELEvaluation.java Mon Apr 28 23:08:14 2014 @@ -110,14 +110,21 @@ public class TestELEvaluation { assertEquals("\\", evaluateExpression("\\")); assertEquals("$", evaluateExpression("$")); assertEquals("#", evaluateExpression("#")); - assertEquals("\\$", evaluateExpression("\\$")); - assertEquals("\\#", evaluateExpression("\\#")); - assertEquals("\\\\$", evaluateExpression("\\\\$")); - assertEquals("\\\\#", evaluateExpression("\\\\#")); + assertEquals("$", evaluateExpression("\\$")); + assertEquals("#", evaluateExpression("\\#")); + assertEquals("\\$", evaluateExpression("\\\\$")); + assertEquals("\\#", evaluateExpression("\\\\#")); assertEquals("${", evaluateExpression("\\${")); assertEquals("#{", evaluateExpression("\\#{")); assertEquals("\\${", evaluateExpression("\\\\${")); assertEquals("\\#{", evaluateExpression("\\\\#{")); + + // '\' is only an escape for '$' and '#'. + assertEquals("$", evaluateExpression("\\$")); + assertEquals("${", evaluateExpression("\\${")); + assertEquals("$a", evaluateExpression("\\$a")); + assertEquals("\\a", evaluateExpression("\\a")); + assertEquals("\\\\", evaluateExpression("\\\\")); } @Test @@ -195,7 +202,6 @@ public class TestELEvaluation { assertNotNull(e); } - // ************************************************************************ private String evaluateExpression(String expression) { Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1590835&r1=1590834&r2=1590835&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon Apr 28 23:08:14 2014 @@ -196,6 +196,12 @@ preferred followed by an assignable match followed by a coercible match. (markt) </fix> + <fix> + Correct the handling of back-slash escaping in the EL parser and no + longer require that <code>\$</code> or <code>\#</code> must be followed + by <code>{</code> in order for the back-slash escaping to take effect. + (markt) + </fix> </changelog> </subsection> <subsection name="Cluster"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org