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