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 ar...@apache.org on 2002/04/04 16:01:56 UTC
cvs commit: jakarta-taglibs/standard/src/org/apache/taglibs/standard/lang/jstl/test parserTests.txt parserTestsOutput.txt
arista 02/04/04 06:01:56
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:
Bug 7737 - EL evaluator incorrectly attempts to evaluated string values containing '$'
The problem should only be showing up in attribute values that end
with "$". This has been fixed by adding a lone "$" to the
"NON_EXPRESSION_TEXT" token.
Revision Changes Path
1.7 +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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ELParser.jj 1 Apr 2002 16:03:33 -0000 1.6
+++ ELParser.jj 4 Apr 2002 14:01:56 -0000 1.7
@@ -44,7 +44,7 @@
<DEFAULT> TOKEN:
{
< NON_EXPRESSION_TEXT:
- ( ~["$"] | ("$" ~["{"]) )+
+ (( ~["$"] | ("$" ~["{"]) )+) | "$"
>
|
< START_EXPRESSION: "${" > : IN_EXPRESSION
1.5 +11 -4 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ELParserTokenManager.java 20 Mar 2002 13:51:59 -0000 1.4
+++ ELParserTokenManager.java 4 Apr 2002 14:01:56 -0000 1.5
@@ -14,7 +14,10 @@
{
case 0:
if ((active0 & 0x4L) != 0L)
+ {
+ jjmatchedKind = 1;
return 2;
+ }
return -1;
default :
return -1;
@@ -106,7 +109,7 @@
{
int[] nextStates;
int startsAt = 0;
- jjnewStateCnt = 3;
+ jjnewStateCnt = 4;
int i = 1;
jjstateSet[0] = startState;
int j, kind = 0x7fffffff;
@@ -129,7 +132,11 @@
jjCheckNAddTwoStates(0, 1);
}
else if (curChar == 36)
- jjstateSet[jjnewStateCnt++] = 2;
+ {
+ if (kind > 1)
+ kind = 1;
+ jjCheckNAdd(2);
+ }
break;
case 0:
if ((0xffffffefffffffffL & l) == 0L)
@@ -140,7 +147,7 @@
break;
case 1:
if (curChar == 36)
- jjstateSet[jjnewStateCnt++] = 2;
+ jjCheckNAdd(2);
break;
case 2:
if (kind > 1)
@@ -206,7 +213,7 @@
kind = 0x7fffffff;
}
++curPos;
- if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
+ if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
return curPos;
try { curChar = input_stream.readChar(); }
catch(java.io.IOException e) { return curPos; }
1.2 +8 -0 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- parserTests.txt 5 Mar 2002 14:10:46 -0000 1.1
+++ parserTests.txt 4 Apr 2002 14:01:56 -0000 1.2
@@ -7,6 +7,14 @@
${ 1 }${ 2 }
abc ${ 1} ${ 2} def
+# testing values that end with or contain "$"
+$
+\$
+ $
+test$
+$test
+test$test
+
# literals
${1}
${-12}
1.3 +16 -2 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- parserTestsOutput.txt 20 Mar 2002 13:51:59 -0000 1.2
+++ parserTestsOutput.txt 4 Apr 2002 14:01:56 -0000 1.3
@@ -14,6 +14,20 @@
Attribute value: abc ${ 1} ${ 2} def
Parses to: abc ${1} ${2} def
+# testing values that end with or contain "$"
+Attribute value: $
+Parses to: $
+Attribute value: \$
+Parses to: \$
+Attribute value: $
+Parses to: $
+Attribute value: test$
+Parses to: test$
+Attribute value: $test
+Parses to: $test
+Attribute value: test$test
+Parses to: test$test
+
# literals
Attribute value: ${1}
Parses to: ${1}
@@ -96,7 +110,7 @@
Attribute value: ${a .b .c}
Parses to: ${a.b.c}
Attribute value: ${ abc . 'def.ghi' . ghi . "jkl \"" }
-Parses to: ${abc."def.ghi".ghi."jkl \""}
+Causes an error: Unable to parse custom action attribute "test" with value "${ abc . 'def.ghi' . ghi . "jkl \"" }": encountered "'def.ghi'", expected one of ""pageContext", "page", "request", "session", "application", "param", "params", <IDENTIFIER>"
# array accessors
Attribute value: ${ a[14] }
@@ -130,5 +144,5 @@
# array accessors of non-integer types
Attribute value: ${ a ["hello"]."12" [17.5] }
-Parses to: ${a["hello"]."12"[17.5]}
+Causes an error: Unable to parse custom action attribute "test" with value "${ a ["hello"]."12" [17.5] }": encountered ""12"", expected one of ""pageContext", "page", "request", "session", "application", "param", "params", <IDENTIFIER>"
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>