You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2003/06/04 16:25:51 UTC

cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util CookieTools.java DateTool.java MimeHeaderField.java

marcsaeg    2003/06/04 07:25:51

  Modified:    src/share/org/apache/tomcat/util Tag: tomcat_32
                        CookieTools.java DateTool.java MimeHeaderField.java
  Log:
  Fixed a thread synchronization bug that appears in MimeHeaderField.parseDate().
  The SimpleDateFormats in DateTool where exposed as public members that parseDate()
  reference directly with no synchronization.  The SimpleDateFormat methods are
  not thread safe.
  
  Tomcat 3.2.x is no longer being officially maintained.  There will be no
  more official releases of Tomcat 3.2.x.  To get these fixes you will need
  to build Tomcat from source.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.7.2.3   +5 -9      jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/CookieTools.java
  
  Index: CookieTools.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/CookieTools.java,v
  retrieving revision 1.7.2.2
  retrieving revision 1.7.2.3
  diff -u -r1.7.2.2 -r1.7.2.3
  --- CookieTools.java	10 Nov 2000 23:37:25 -0000	1.7.2.2
  +++ CookieTools.java	4 Jun 2003 14:25:50 -0000	1.7.2.3
  @@ -135,13 +135,9 @@
   	    if (version == 0) {
   		buf.append (";Expires=");
                   if (cookie.getMaxAge() == 0)
  -                    DateTool.oldCookieFormat.format(new Date(10000), buf,
  -                                                    new FieldPosition(0));
  +                    DateTool.formatOldCookie(new Date(10000), buf);
                   else
  -                    DateTool.oldCookieFormat.format
  -                        (new Date( System.currentTimeMillis() +
  -                                   cookie.getMaxAge() *1000L), buf,
  -                         new FieldPosition(0));
  +                    DateTool.formatOldCookie(new Date( System.currentTimeMillis() + cookie.getMaxAge() *1000L), buf);
   	    } else {
   		buf.append (";Max-Age=");
   		buf.append (cookie.getMaxAge());
  
  
  
  1.2.2.2   +46 -17    jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/DateTool.java
  
  Index: DateTool.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/DateTool.java,v
  retrieving revision 1.2.2.1
  retrieving revision 1.2.2.2
  diff -u -r1.2.2.1 -r1.2.2.2
  --- DateTool.java	30 Jul 2001 00:57:34 -0000	1.2.2.1
  +++ DateTool.java	4 Jun 2003 14:25:50 -0000	1.2.2.2
  @@ -110,38 +110,67 @@
   
       /** DateFormat to be used to format dates
        */
  -    public final static SimpleDateFormat rfc1123Format =
  -	new SimpleDateFormat(RFC1123_PATTERN, LOCALE_US);
  +    private final static SimpleDateFormat rfc1123Format = new SimpleDateFormat(RFC1123_PATTERN, LOCALE_US);
       
       /** DateFormat to be used to format old netscape cookies
        */
  -    public final static SimpleDateFormat oldCookieFormat =
  -	new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US);
  +    private final static SimpleDateFormat oldCookieFormat = new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US);
       
  -    public final static SimpleDateFormat rfc1036Format =
  -	new SimpleDateFormat(rfc1036Pattern, LOCALE_US);
  +    private final static SimpleDateFormat rfc1036Format = new SimpleDateFormat(rfc1036Pattern, LOCALE_US);
       
  -    public final static SimpleDateFormat asctimeFormat =
  -	new SimpleDateFormat(asctimePattern, LOCALE_US);
  +    private final static SimpleDateFormat asctimeFormat = new SimpleDateFormat(asctimePattern, LOCALE_US);
       
       static {
  -	rfc1123Format.setTimeZone(GMT_ZONE);
  -	oldCookieFormat.setTimeZone(GMT_ZONE);
  -	rfc1036Format.setTimeZone(GMT_ZONE);
  -	asctimeFormat.setTimeZone(GMT_ZONE);
  +        rfc1123Format.setTimeZone(GMT_ZONE);
  +        oldCookieFormat.setTimeZone(GMT_ZONE);
  +        rfc1036Format.setTimeZone(GMT_ZONE);
  +        asctimeFormat.setTimeZone(GMT_ZONE);
       }
       
       private static String rfc1123DS;
       private static long   rfc1123Sec;
   
  +
  +    public static Date rfc1123Parse(String dateString) throws ParseException
  +    {
  +        synchronized(rfc1123Format){
  +            return rfc1123Format.parse(dateString);
  +        }
  +    }
  +
  +    public static Date rfc1036Parse(String dateString) throws ParseException
  +    {
  +        synchronized(rfc1036Format){
  +            return rfc1036Format.parse(dateString);
  +        }
  +    }
  +
  +    public static Date asctimeParse(String dateString) throws ParseException
  +    {
  +        synchronized(asctimeFormat){
  +            return asctimeFormat.parse(dateString);
  +        }
  +    }
  +
  +    public static void formatOldCookie(Date d, StringBuffer buf)
  +    {
  +        synchronized(oldCookieFormat){
  +            oldCookieFormat.format(d, buf, new FieldPosition(0));
  +        }
  +    }
  +
       /**
        */
  -    public static String format1123( Date d ) {
  +    public static String format1123( Date d )
  +    {
           long dt = d.getTime() % 1000;
           if ((rfc1123DS != null) && (dt == rfc1123Sec))
                   return rfc1123DS;
   
  -        rfc1123DS  = rfc1123Format.format( d );
  +        synchronized(rfc1123Format){
  +            rfc1123DS  = rfc1123Format.format( d );
  +        }
  +
           rfc1123Sec = dt;
           return rfc1123DS;
       }
  
  
  
  1.10.2.4  +22 -19    jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/MimeHeaderField.java
  
  Index: MimeHeaderField.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/Attic/MimeHeaderField.java,v
  retrieving revision 1.10.2.3
  retrieving revision 1.10.2.4
  diff -u -r1.10.2.3 -r1.10.2.4
  --- MimeHeaderField.java	30 Jul 2001 00:57:34 -0000	1.10.2.3
  +++ MimeHeaderField.java	4 Jun 2003 14:25:50 -0000	1.10.2.4
  @@ -336,26 +336,29 @@
   	return parseDate( value );
       }
   
  -    long parseDate( MessageString value ) {
  -	String dateString=value.toString();
  -	Date date=null;
  +    long parseDate( MessageString value )
  +    {
  +        String dateString=value.toString();
  +        Date date=null;
           try {
  -            date = DateTool.rfc1123Format.parse(dateString);
  -	    return date.getTime();
  -	} catch (ParseException e) { }
  -
  +            date = DateTool.rfc1123Parse(dateString);
  +            return date.getTime();
  +        } catch (ParseException e){
  +        }
           try {
  -	    date = DateTool.rfc1036Format.parse(dateString);
  -	    return date.getTime();
  -	} catch (ParseException e) { }
  -	
  +            date = DateTool.rfc1036Parse(dateString);
  +            return date.getTime();
  +        } catch (ParseException e)
  +        {
  +        }
           try {
  -            date = DateTool.asctimeFormat.parse(dateString);
  -	    return date.getTime();
  -        } catch (ParseException pe) {
  +            date = DateTool.asctimeParse(dateString);
  +            return date.getTime();
  +        } catch (ParseException pe){
           }
  -	String msg = sm.getString("httpDate.pe", dateString);
  -	throw new IllegalArgumentException(msg);
  +
  +        String msg = sm.getString("httpDate.pe", dateString);
  +        throw new IllegalArgumentException(msg);
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org