Author: markt
Date: Wed Sep  9 19:30:52 2015
New Revision: 1702092

URL: http://svn.apache.org/r1702092
Log:
Fix an edge case parser bug found while investigating BZ 57136

Modified:
    tomcat/trunk/java/org/apache/el/parser/ELParser.jjt
    tomcat/trunk/java/org/apache/el/parser/ELParserTokenManager.java
    tomcat/trunk/test/org/apache/el/TestELEvaluation.java

Modified: tomcat/trunk/java/org/apache/el/parser/ELParser.jjt
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParser.jjt?rev=1702092&r1=1702091&r2=1702092&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/ELParser.jjt (original)
+++ tomcat/trunk/java/org/apache/el/parser/ELParser.jjt Wed Sep  9 19:30:52 2015
@@ -473,7 +473,7 @@ java.util.Deque<Integer> deque = new jav
    */
   < LITERAL_EXPRESSION:
     (   (~["$", "#", "\\"])* "\\" (["$", "#"])?
-      | (~["$", "#"])* (["$", "#"] ~["{", "$", "#"])
+      | (~["$", "#"])* (["$", "#"] ~["{", "$", "#", "\\"])
       | (~["$", "#"])+
     )+
     | "$"

Modified: tomcat/trunk/java/org/apache/el/parser/ELParserTokenManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/ELParserTokenManager.java?rev=1702092&r1=1702091&r2=1702092&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/ELParserTokenManager.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/ELParserTokenManager.java Wed Sep  9 
19:30:52 2015
@@ -1,7 +1,5 @@
 /* Generated By:JJTree&JavaCC: Do not edit this line. 
ELParserTokenManager.java */
 package org.apache.el.parser;
-import java.io.StringReader;
-import javax.el.ELException;
 
 /** Token Manager. */
 @SuppressWarnings("all") // Ignore warnings in generated code
@@ -187,7 +185,7 @@ private int jjMoveNfa_0(int startState,
                   jjCheckNAddTwoStates(3, 4);
                   break;
                case 5:
-                  if ((0xf7ffffffffffffffL & l) == 0L)
+                  if ((0xf7ffffffefffffffL & l) == 0L)
                      break;
                   if (kind > 1)
                      kind = 1;

Modified: tomcat/trunk/test/org/apache/el/TestELEvaluation.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestELEvaluation.java?rev=1702092&r1=1702091&r2=1702092&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/TestELEvaluation.java (original)
+++ tomcat/trunk/test/org/apache/el/TestELEvaluation.java Wed Sep  9 19:30:52 
2015
@@ -30,6 +30,7 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import org.junit.Assert;
 import org.junit.Test;
 
 import org.apache.el.lang.ELSupport;
@@ -207,6 +208,32 @@ public class TestELEvaluation {
         assertNotNull(e);
     }
 
+    @Test
+    public void testEscape01() {
+        Assert.assertEquals("$${", evaluateExpression("$\\${"));
+    }
+
+    @Test
+    public void testBug49081a() {
+        Assert.assertEquals("$2", evaluateExpression("$${1+1}"));
+    }
+
+    @Test
+    public void testBug49081b() {
+        Assert.assertEquals("#2", evaluateExpression("##{1+1}"));
+    }
+
+    @Test
+    public void testBug49081c() {
+        Assert.assertEquals("#2", evaluateExpression("#${1+1}"));
+    }
+
+    @Test
+    public void testBug49081d() {
+        Assert.assertEquals("$2", evaluateExpression("$#{1+1}"));
+    }
+
+
     // ************************************************************************
 
     private String evaluateExpression(String expression) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to