mrglavas    2005/07/18 21:33:45

  Modified:    java/src/org/apache/xerces/impl/dv/xs DayDV.java
                        MonthDayDV.java MonthDV.java
                        AbstractDateTimeDV.java
  Log:
  Fixing a bug affecting the following types: date, gDay, gMonthDay, gMonth and 
gYearMonth.
  We were accepting garbage immediately before the time zone, so a value such as
  "1111-11-11 some arbitrary text -05:00" was passing through without an error 
being flagged.
  
  Revision  Changes    Path
  1.18      +3 -4      
xml-xerces/java/src/org/apache/xerces/impl/dv/xs/DayDV.java
  
  Index: DayDV.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/DayDV.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- DayDV.java        6 May 2005 15:31:14 -0000       1.17
  +++ DayDV.java        19 Jul 2005 04:32:12 -0000      1.18
  @@ -68,12 +68,11 @@
           date.day=parseInt(str, 3,5);
   
           if ( DAY_SIZE<len ) {
  -            int sign = findUTCSign(str, DAY_SIZE, len);
  -            if ( sign<0 ) {
  +            if (!isNextCharUTCSign(str, DAY_SIZE, len)) {
                   throw new SchemaDateTimeException ("Error in day parsing");
               }
               else {
  -                getTimeZone(str, date, sign, len);
  +                getTimeZone(str, date, DAY_SIZE, len);
               }
           }
   
  
  
  
  1.18      +3 -4      
xml-xerces/java/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java
  
  Index: MonthDayDV.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/MonthDayDV.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- MonthDayDV.java   6 May 2005 15:31:14 -0000       1.17
  +++ MonthDayDV.java   19 Jul 2005 04:32:24 -0000      1.18
  @@ -80,12 +80,11 @@
           date.day=parseInt(str, start, start+2);
   
           if ( MONTHDAY_SIZE<len ) {
  -            int sign = findUTCSign(str, MONTHDAY_SIZE, len);
  -            if ( sign<0 ) {
  +            if (!isNextCharUTCSign(str, MONTHDAY_SIZE, len)) {
                   throw new SchemaDateTimeException ("Error in month parsing:" 
+str);
               }
               else {
  -                getTimeZone(str, date, sign, len);
  +                getTimeZone(str, date, MONTHDAY_SIZE, len);
               }
           }
           //validate and normalize
  
  
  
  1.20      +3 -4      
xml-xerces/java/src/org/apache/xerces/impl/dv/xs/MonthDV.java
  
  Index: MonthDV.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/MonthDV.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- MonthDV.java      6 May 2005 15:31:14 -0000       1.19
  +++ MonthDV.java      19 Jul 2005 04:32:30 -0000      1.20
  @@ -78,12 +78,11 @@
               stop += 2;
           }
           if (stop < len) {
  -            int sign = findUTCSign(str, stop, len);
  -            if ( sign<0 ) {
  +            if (!isNextCharUTCSign(str, stop, len)) {
                   throw new SchemaDateTimeException ("Error in month parsing: 
"+str);
               }
               else {
  -                getTimeZone(str, date, sign, len);
  +                getTimeZone(str, date, stop, len);
               }
           }
           //validate and normalize
  
  
  
  1.40      +15 -5     
xml-xerces/java/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java
  
  Index: AbstractDateTimeDV.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/AbstractDateTimeDV.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- AbstractDateTimeDV.java   6 May 2005 15:31:14 -0000       1.39
  +++ AbstractDateTimeDV.java   19 Jul 2005 04:32:40 -0000      1.40
  @@ -329,13 +329,12 @@
                
                //fStart points right after the date
                
  -             if ( start<end ) {
  -                     int sign = findUTCSign(buffer, start, end);
  -                     if ( sign<0 ) {
  +             if ( start < end ) {
  +                     if (!isNextCharUTCSign(buffer, start, end)) {
                                throw new RuntimeException ("Error in month 
parsing");
                        }
                        else {
  -                             getTimeZone(buffer, date, sign, end);
  +                             getTimeZone(buffer, date, start, end);
                        }
                }
        }
  @@ -493,6 +492,17 @@
                }
                return -1;
        }
  +    
  +    /**
  +     * Returns <code>true</code> if the character at start is 'Z', '+' or 
'-'.
  +     */
  +    protected final boolean isNextCharUTCSign(String buffer, int start, int 
end) {
  +        if (start < end) {
  +            char c = buffer.charAt(start);
  +            return (c == 'Z' || c == '+' || c == '-');
  +        }
  +        return false;
  +    }
        
        /**
         * Given start and end position, parses string value
  
  
  

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

Reply via email to