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>