You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-dev@jakarta.apache.org by sh...@apache.org on 2002/10/14 02:49:58 UTC
cvs commit: jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/test parserTests.txt parserTestsOutput.txt
shawn 2002/10/13 17:49:58
Modified: standard/src/org/apache/taglibs/standard/lang/jstl
ELParser.jj
standard/src/org/apache/taglibs/standard/lang/jstl/parser
ELParserTokenManager.java
standard/src/org/apache/taglibs/standard/lang/jstl/test
parserTests.txt parserTestsOutput.txt
Log:
Fix for:
Bug 12333: ELParser too greedy while consuming '$' characters
Plus new corresponding regression tests for the EL
Revision Changes Path
1.15 +1 -1 jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/ELParser.jj
Index: ELParser.jj
===================================================================
RCS file: /home/cvs/jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/ELParser.jj,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ELParser.jj 15 Jul 2002 05:53:49 -0000 1.14
+++ ELParser.jj 14 Oct 2002 00:49:57 -0000 1.15
@@ -52,7 +52,7 @@
<DEFAULT> TOKEN:
{
< NON_EXPRESSION_TEXT:
- (( ~["$"] | ("$" ~["{"]) )+) | "$"
+ (~["$"])+ | ("$" (~["{", "$"])+) | "$"
>
|
< START_EXPRESSION: "${" > : IN_EXPRESSION
1.13 +20 -16 jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/parser/ELParserTokenManager.java
Index: ELParserTokenManager.java
===================================================================
RCS file: /home/cvs/jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/parser/ELParserTokenManager.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- ELParserTokenManager.java 15 Jul 2002 05:53:49 -0000 1.12
+++ ELParserTokenManager.java 14 Oct 2002 00:49:57 -0000 1.13
@@ -48,7 +48,7 @@
case 36:
return jjMoveStringLiteralDfa1_0(0x4L);
default :
- return jjMoveNfa_0(3, 0);
+ return jjMoveNfa_0(1, 0);
}
}
private final int jjMoveStringLiteralDfa1_0(long active0)
@@ -109,7 +109,7 @@
{
int[] nextStates;
int startsAt = 0;
- jjnewStateCnt = 4;
+ jjnewStateCnt = 3;
int i = 1;
jjstateSet[0] = startState;
int j, kind = 0x7fffffff;
@@ -124,12 +124,12 @@
{
switch(jjstateSet[--i])
{
- case 3:
+ case 1:
if ((0xffffffefffffffffL & l) != 0L)
{
if (kind > 1)
kind = 1;
- jjCheckNAddTwoStates(0, 1);
+ jjCheckNAdd(0);
}
else if (curChar == 36)
{
@@ -143,16 +143,14 @@
break;
if (kind > 1)
kind = 1;
- jjCheckNAddTwoStates(0, 1);
- break;
- case 1:
- if (curChar == 36)
- jjCheckNAdd(2);
+ jjCheckNAdd(0);
break;
case 2:
+ if ((0xffffffefffffffffL & l) == 0L)
+ break;
if (kind > 1)
kind = 1;
- jjCheckNAddTwoStates(0, 1);
+ jjCheckNAdd(2);
break;
default : break;
}
@@ -165,18 +163,18 @@
{
switch(jjstateSet[--i])
{
- case 3:
+ case 1:
case 0:
if (kind > 1)
kind = 1;
- jjCheckNAddTwoStates(0, 1);
+ jjCheckNAdd(0);
break;
case 2:
if ((0xf7ffffffffffffffL & l) == 0L)
break;
if (kind > 1)
kind = 1;
- jjCheckNAddTwoStates(0, 1);
+ jjstateSet[jjnewStateCnt++] = 2;
break;
default : break;
}
@@ -193,14 +191,20 @@
{
switch(jjstateSet[--i])
{
- case 3:
+ case 1:
case 0:
+ if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+ break;
+ if (kind > 1)
+ kind = 1;
+ jjCheckNAdd(0);
+ break;
case 2:
if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
break;
if (kind > 1)
kind = 1;
- jjCheckNAddTwoStates(0, 1);
+ jjstateSet[jjnewStateCnt++] = 2;
break;
default : break;
}
@@ -213,7 +217,7 @@
kind = 0x7fffffff;
}
++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
+ if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
return curPos;
try { curChar = input_stream.readChar(); }
catch(java.io.IOException e) { return curPos; }
1.10 +18 -12 jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/test/parserTests.txt
Index: parserTests.txt
===================================================================
RCS file: /home/cvs/jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/test/parserTests.txt,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- parserTests.txt 15 Jul 2002 05:53:50 -0000 1.9
+++ parserTests.txt 14 Oct 2002 00:49:57 -0000 1.10
@@ -17,6 +17,12 @@
test$$$
test$$${ 34 }
test$$${ 34 }$$
+test$${ 34 }
+$${ 34 }
+$$
+test$$
+test$$test
+${ 34 }$${ 34 }
# literals
${1}
@@ -124,18 +130,18 @@
${ empty }
# functions
-${a()}
-${ a() }
-${a(b)}
-${ a(b) }
-${a(b,c)}
-${a(b,c,d)}
-${a:b(c)}
-${a:b(c,d)}
-${a:b(c,d,e)}
-${a(b).c}
-${a(b)[c]}
-${a[b()]}
+#${a()}
+#${ a() }
+#${a(b)}
+#${ a(b) }
+#${a(b,c)}
+#${a(b,c,d)}
+#${a:b(c)}
+#${a:b(c,d)}
+#${a:b(c,d,e)}
+#${a(b).c}
+#${a(b)[c]}
+#${a[b()]}
# non-ascii input - the parser automatically translates the @@non-ascii
# into a UNICODE string with value \u1111
1.12 +12 -0 jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/test/parserTestsOutput.txt
Index: parserTestsOutput.txt
===================================================================
RCS file: /home/cvs/jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/test/parserTestsOutput.txt,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- parserTestsOutput.txt 15 Jul 2002 05:53:50 -0000 1.11
+++ parserTestsOutput.txt 14 Oct 2002 00:49:57 -0000 1.12
@@ -33,6 +33,18 @@
Parses to: test$$${34}
Attribute value: test$$${ 34 }$$
Parses to: test$$${34}$$
+Attribute value: test$${ 34 }
+Parses to: test$${34}
+Attribute value: $${ 34 }
+Parses to: $${34}
+Attribute value: $$
+Parses to: $$
+Attribute value: test$$
+Parses to: test$$
+Attribute value: test$$test
+Parses to: test$$test
+Attribute value: ${ 34 }$${ 34 }
+Parses to: ${34}$${34}
# literals
Attribute value: ${1}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>