niallp      2004/09/03 11:06:58

  Modified:    src/share/org/apache/struts/validator/validwhen
                        ValidWhenLexer.java ValidWhenParser.g
                        ValidWhenParser.java
  Log:
  Fixed ValidWhen Bugs 31025 and 31026 reported by Gisella Saavedra
  
  Revision  Changes    Path
  1.10      +52 -35    
jakarta-struts/src/share/org/apache/struts/validator/validwhen/ValidWhenLexer.java
  
  Index: ValidWhenLexer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/validwhen/ValidWhenLexer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ValidWhenLexer.java       19 Aug 2004 17:37:53 -0000      1.9
  +++ ValidWhenLexer.java       3 Sep 2004 18:06:58 -0000       1.10
  @@ -1,4 +1,4 @@
  -// $ANTLR 2.7.2: "validWhenParser.g" -> "ValidWhenLexer.java"$
  +// $ANTLR 2.7.2: "ValidWhenParser.g" -> "ValidWhenLexer.java"$
   
   /*
    * $Header$
  @@ -87,9 +87,9 @@
                                        theRetToken=_returnToken;
                                        break;
                                }
  -                             case '1':  case '2':  case '3':  case '4':
  -                             case '5':  case '6':  case '7':  case '8':
  -                             case '9':
  +                             case '-':  case '1':  case '2':  case '3':
  +                             case '4':  case '5':  case '6':  case '7':
  +                             case '8':  case '9':
                                {
                                        mDECIMAL_LITERAL(true);
                                        theRetToken=_returnToken;
  @@ -160,10 +160,6 @@
                                                mHEX_LITERAL(true);
                                                theRetToken=_returnToken;
                                        }
  -                                     else if ((LA(1)=='0') && ((LA(2) >= '0' && 
LA(2) <= '7'))) {
  -                                             mOCTAL_LITERAL(true);
  -                                             theRetToken=_returnToken;
  -                                     }
                                        else if ((LA(1)=='<') && (LA(2)=='=')) {
                                                mLESSEQUALSIGN(true);
                                                theRetToken=_returnToken;
  @@ -172,6 +168,10 @@
                                                mGREATEREQUALSIGN(true);
                                                theRetToken=_returnToken;
                                        }
  +                                     else if ((LA(1)=='0') && (true)) {
  +                                             mOCTAL_LITERAL(true);
  +                                             theRetToken=_returnToken;
  +                                     }
                                        else if ((LA(1)=='<') && (true)) {
                                                mLESSTHANSIGN(true);
                                                theRetToken=_returnToken;
  @@ -258,16 +258,35 @@
                int _saveIndex;
                
                {
  +             switch ( LA(1)) {
  +             case '-':
  +             {
  +                     match('-');
  +                     break;
  +             }
  +             case '1':  case '2':  case '3':  case '4':
  +             case '5':  case '6':  case '7':  case '8':
  +             case '9':
  +             {
  +                     break;
  +             }
  +             default:
  +             {
  +                     throw new NoViableAltForCharException((char)LA(1), 
getFilename(), getLine(), getColumn());
  +             }
  +             }
  +             }
  +             {
                matchRange('1','9');
                }
                {
  -             _loop19:
  +             _loop20:
                do {
                        if (((LA(1) >= '0' && LA(1) <= '9'))) {
                                matchRange('0','9');
                        }
                        else {
  -                             break _loop19;
  +                             break _loop20;
                        }
                        
                } while (true);
  @@ -287,8 +306,8 @@
                match('0');
                match('x');
                {
  -             int _cnt22=0;
  -             _loop22:
  +             int _cnt23=0;
  +             _loop23:
                do {
                        switch ( LA(1)) {
                        case '0':  case '1':  case '2':  case '3':
  @@ -306,10 +325,10 @@
                        }
                        default:
                        {
  -                             if ( _cnt22>=1 ) { break _loop22; } else {throw new 
NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
  +                             if ( _cnt23>=1 ) { break _loop23; } else {throw new 
NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
                        }
                        }
  -                     _cnt22++;
  +                     _cnt23++;
                } while (true);
                }
                if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
  @@ -326,17 +345,15 @@
                
                match('0');
                {
  -             int _cnt25=0;
  -             _loop25:
  +             _loop26:
                do {
                        if (((LA(1) >= '0' && LA(1) <= '7'))) {
                                matchRange('0','7');
                        }
                        else {
  -                             if ( _cnt25>=1 ) { break _loop25; } else {throw new 
NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
  +                             break _loop26;
                        }
                        
  -                     _cnt25++;
                } while (true);
                }
                if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
  @@ -357,17 +374,17 @@
                        {
                        match('\'');
                        {
  -                     int _cnt29=0;
  -                     _loop29:
  +                     int _cnt30=0;
  +                     _loop30:
                        do {
                                if ((_tokenSet_0.member(LA(1)))) {
                                        matchNot('\'');
                                }
                                else {
  -                                     if ( _cnt29>=1 ) { break _loop29; } else 
{throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), 
getColumn());}
  +                                     if ( _cnt30>=1 ) { break _loop30; } else 
{throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), 
getColumn());}
                                }
                                
  -                             _cnt29++;
  +                             _cnt30++;
                        } while (true);
                        }
                        match('\'');
  @@ -379,17 +396,17 @@
                        {
                        match('\"');
                        {
  -                     int _cnt32=0;
  -                     _loop32:
  +                     int _cnt33=0;
  +                     _loop33:
                        do {
                                if ((_tokenSet_1.member(LA(1)))) {
                                        matchNot('\"');
                                }
                                else {
  -                                     if ( _cnt32>=1 ) { break _loop32; } else 
{throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), 
getColumn());}
  +                                     if ( _cnt33>=1 ) { break _loop33; } else 
{throw new NoViableAltForCharException((char)LA(1), getFilename(), getLine(), 
getColumn());}
                                }
                                
  -                             _cnt32++;
  +                             _cnt33++;
                        } while (true);
                        }
                        match('\"');
  @@ -508,8 +525,8 @@
                }
                }
                {
  -             int _cnt41=0;
  -             _loop41:
  +             int _cnt42=0;
  +             _loop42:
                do {
                        switch ( LA(1)) {
                        case 'a':  case 'b':  case 'c':  case 'd':
  @@ -542,10 +559,10 @@
                        }
                        default:
                        {
  -                             if ( _cnt41>=1 ) { break _loop41; } else {throw new 
NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
  +                             if ( _cnt42>=1 ) { break _loop42; } else {throw new 
NoViableAltForCharException((char)LA(1), getFilename(), getLine(), getColumn());}
                        }
                        }
  -                     _cnt41++;
  +                     _cnt42++;
                } while (true);
                }
                if ( _createToken && _token==null && _ttype!=Token.SKIP ) {
  @@ -639,12 +656,12 @@
        
        
        private static final long[] mk_tokenSet_0() {
  -             long[] data = { 8358477528813282816L, 576460746532061184L, 0L, 0L};
  +             long[] data = { 8358512713185371648L, 576460746532061184L, 0L, 0L};
                return data;
        }
        public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
        private static final long[] mk_tokenSet_1() {
  -             long[] data = { 8358478061389227520L, 576460746532061184L, 0L, 0L};
  +             long[] data = { 8358513245761316352L, 576460746532061184L, 0L, 0L};
                return data;
        }
        public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
  
  
  
  1.7       +8 -8      
jakarta-struts/src/share/org/apache/struts/validator/validwhen/ValidWhenParser.g
  
  Index: ValidWhenParser.g
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/validwhen/ValidWhenParser.g,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ValidWhenParser.g 24 Jun 2004 23:51:52 -0000      1.6
  +++ ValidWhenParser.g 3 Sep 2004 18:06:58 -0000       1.7
  @@ -156,9 +156,9 @@
   
   
   integer
  -: d:DECIMAL_LITERAL { argStack.push(Integer.valueOf(d.getText())); }
  -| h:HEX_LITERAL { argStack.push(Integer.valueOf(d.getText())); }
  -| o:OCTAL_LITERAL { argStack.push(Integer.valueOf(d.getText())); } ;
  +: d:DECIMAL_LITERAL { argStack.push(Integer.decode(d.getText())); }
  +| h:HEX_LITERAL { argStack.push(Integer.decode(h.getText())); }
  +| o:OCTAL_LITERAL { argStack.push(Integer.decode(o.getText())); } ;
   
   string : str:STRING_LITERAL { argStack.push(str.getText().substring(1, 
str.getText().length()-1)); };
   
  @@ -246,11 +246,11 @@
        { $setType(Token.SKIP); }
      ;
   
  -DECIMAL_LITERAL : ('1'..'9') ('0'..'9')* ;
  +DECIMAL_LITERAL : ('-')? ('1'..'9') ('0'..'9')*;
   
   HEX_LITERAL : '0' 'x'  ('0'..'9' | 'a'..'f')+ ;
   
  -OCTAL_LITERAL : '0' ('0'..'7')+ ;
  +OCTAL_LITERAL : '0' ('0'..'7')* ;
   
   STRING_LITERAL : ('\'' (~'\'')+ '\'') | ('\"' (~'\"')+ '\"') ;
   
  
  
  
  1.10      +26 -22    
jakarta-struts/src/share/org/apache/struts/validator/validwhen/ValidWhenParser.java
  
  Index: ValidWhenParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/validator/validwhen/ValidWhenParser.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ValidWhenParser.java      14 Mar 2004 06:23:53 -0000      1.9
  +++ ValidWhenParser.java      3 Sep 2004 18:06:58 -0000       1.10
  @@ -1,11 +1,11 @@
  -// $ANTLR 2.7.2: "validWhenParser.g" -> "ValidWhenParser.java"$
  +// $ANTLR 2.7.2: "ValidWhenParser.g" -> "ValidWhenParser.java"$
   
   /*
    * $Header$
    * $Revision$
    * $Date$
    *
  - * Copyright 2003,2004 The Apache Software Foundation.
  + * Copyright 2003-2004 The Apache Software Foundation.
    * 
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -22,26 +22,30 @@
   
   package org.apache.struts.validator.validwhen;
   
  -import java.util.Stack;
  -
  +import java.util.Stack; 
   import org.apache.commons.validator.util.ValidatorUtils;
   
  -import antlr.NoViableAltException;
  -import antlr.ParserSharedInputState;
  -import antlr.RecognitionException;
  -import antlr.Token;
  +
   import antlr.TokenBuffer;
  -import antlr.TokenStream;
   import antlr.TokenStreamException;
  +import antlr.TokenStreamIOException;
  +import antlr.ANTLRException;
  +import antlr.LLkParser;
  +import antlr.Token;
  +import antlr.TokenStream;
  +import antlr.RecognitionException;
  +import antlr.NoViableAltException;
  +import antlr.MismatchedTokenException;
  +import antlr.SemanticException;
  +import antlr.ParserSharedInputState;
   import antlr.collections.impl.BitSet;
   
  -public class ValidWhenParser extends antlr.LLkParser      
  -     implements ValidWhenParserTokenTypes {
  -
  -     Stack argStack = new Stack();
  -     Object form;
  -     int index;
  -     String value;
  +public class ValidWhenParser extends antlr.LLkParser       implements 
ValidWhenParserTokenTypes
  + {
  +Stack argStack = new Stack();
  +Object form;
  +int index;
  +String value;
   
       public void setForm(Object f) { form = f; };
       public void setIndex (int i) { index = i; };
  @@ -195,21 +199,21 @@
                {
                        d = LT(1);
                        match(DECIMAL_LITERAL);
  -                     argStack.push(Integer.valueOf(d.getText()));
  +                     argStack.push(Integer.decode(d.getText()));
                        break;
                }
                case HEX_LITERAL:
                {
                        h = LT(1);
                        match(HEX_LITERAL);
  -                     argStack.push(Integer.valueOf(d.getText()));
  +                     argStack.push(Integer.decode(h.getText()));
                        break;
                }
                case OCTAL_LITERAL:
                {
                        o = LT(1);
                        match(OCTAL_LITERAL);
  -                     argStack.push(Integer.valueOf(d.getText()));
  +                     argStack.push(Integer.decode(o.getText()));
                        break;
                }
                default:
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to