Skip to content

Commit 7bd0e35

Browse files
committed
Fix an edge case parser bug found while investigating BZ 57136
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1702092 13f79535-47bb-0310-9956-ffa450edef68
1 parent 0d40741 commit 7bd0e35

File tree

3 files changed

+29
-4
lines changed

3 files changed

+29
-4
lines changed

java/org/apache/el/parser/ELParser.jjt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ java.util.Deque<Integer> deque = new java.util.ArrayDeque<Integer>();
473473
*/
474474
< LITERAL_EXPRESSION:
475475
( (~["$", "#", "\\"])* "\\" (["$", "#"])?
476-
| (~["$", "#"])* (["$", "#"] ~["{", "$", "#"])
476+
| (~["$", "#"])* (["$", "#"] ~["{", "$", "#", "\\"])
477477
| (~["$", "#"])+
478478
)+
479479
| "$"

java/org/apache/el/parser/ELParserTokenManager.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
/* Generated By:JJTree&JavaCC: Do not edit this line. ELParserTokenManager.java */
22
package org.apache.el.parser;
3-
import java.io.StringReader;
4-
import javax.el.ELException;
53

64
/** Token Manager. */
75
@SuppressWarnings("all") // Ignore warnings in generated code
@@ -187,7 +185,7 @@ else if (curChar == 92)
187185
jjCheckNAddTwoStates(3, 4);
188186
break;
189187
case 5:
190-
if ((0xf7ffffffffffffffL & l) == 0L)
188+
if ((0xf7ffffffefffffffL & l) == 0L)
191189
break;
192190
if (kind > 1)
193191
kind = 1;

test/org/apache/el/TestELEvaluation.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static org.junit.Assert.assertTrue;
3131
import static org.junit.Assert.fail;
3232

33+
import org.junit.Assert;
3334
import org.junit.Test;
3435

3536
import org.apache.el.lang.ELSupport;
@@ -207,6 +208,32 @@ public void testMixedTypes() {
207208
assertNotNull(e);
208209
}
209210

211+
@Test
212+
public void testEscape01() {
213+
Assert.assertEquals("$${", evaluateExpression("$\\${"));
214+
}
215+
216+
@Test
217+
public void testBug49081a() {
218+
Assert.assertEquals("$2", evaluateExpression("$${1+1}"));
219+
}
220+
221+
@Test
222+
public void testBug49081b() {
223+
Assert.assertEquals("#2", evaluateExpression("##{1+1}"));
224+
}
225+
226+
@Test
227+
public void testBug49081c() {
228+
Assert.assertEquals("#2", evaluateExpression("#${1+1}"));
229+
}
230+
231+
@Test
232+
public void testBug49081d() {
233+
Assert.assertEquals("$2", evaluateExpression("$#{1+1}"));
234+
}
235+
236+
210237
// ************************************************************************
211238

212239
private String evaluateExpression(String expression) {

0 commit comments

Comments
 (0)