Author: markt
Date: Wed Jun 3 21:59:02 2009
New Revision: 781598
URL: http://svn.apache.org/viewvc?rev=781598&view=rev
Log:
Make DateTool thread safe. Patch by fhanik.
Modified:
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/DateTool.java
tomcat/container/tc5.5.x/webapps/docs/changelog.xml
Modified:
tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/DateTool.java
URL:
http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/DateTool.java?rev=781598&r1=781597&r2=781598&view=diff
==============================================================================
--- tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/DateTool.java
(original)
+++ tomcat/connectors/trunk/util/java/org/apache/tomcat/util/buf/DateTool.java
Wed Jun 3 21:59:02 2009
@@ -66,28 +66,42 @@
/** DateFormat to be used to format dates. Called from MessageBytes
*/
- private final static DateFormat rfc1123Format =
- new SimpleDateFormat(RFC1123_PATTERN, LOCALE_US);
+ private final static ThreadLocal<DateFormat> rfc1123Format = new
ThreadLocal<DateFormat>() {
+ public DateFormat initialValue() {
+ DateFormat result = new SimpleDateFormat(RFC1123_PATTERN,
LOCALE_US);
+ result.setTimeZone(GMT_ZONE);
+ return result;
+ }
+ };
/** DateFormat to be used to format old netscape cookies
Called from ServerCookie
*/
- private final static DateFormat oldCookieFormat =
- new SimpleDateFormat(OLD_COOKIE_PATTERN, LOCALE_US);
-
- private final static DateFormat rfc1036Format =
- new SimpleDateFormat(rfc1036Pattern, LOCALE_US);
+ private final static ThreadLocal<DateFormat> oldCookieFormat = new
ThreadLocal<DateFormat>() {
+ public DateFormat initialValue() {
+ DateFormat result = new SimpleDateFormat(OLD_COOKIE_PATTERN,
LOCALE_US);
+ result.setTimeZone(GMT_ZONE);
+ return result;
+ }
+ };
+
- private final static DateFormat asctimeFormat =
- new SimpleDateFormat(asctimePattern, LOCALE_US);
+ private final static ThreadLocal<DateFormat> rfc1036Format = new
ThreadLocal<DateFormat>() {
+ public DateFormat initialValue() {
+ DateFormat result = new SimpleDateFormat(rfc1036Pattern,
LOCALE_US);
+ result.setTimeZone(GMT_ZONE);
+ return result;
+ }
+ };
+
+ private final static ThreadLocal<DateFormat> asctimeFormat = new
ThreadLocal<DateFormat>() {
+ public DateFormat initialValue() {
+ DateFormat result = new SimpleDateFormat(asctimePattern,
LOCALE_US);
+ result.setTimeZone(GMT_ZONE);
+ return result;
+ }
+ };
- static {
- rfc1123Format.setTimeZone(GMT_ZONE);
- oldCookieFormat.setTimeZone(GMT_ZONE);
- rfc1036Format.setTimeZone(GMT_ZONE);
- asctimeFormat.setTimeZone(GMT_ZONE);
- }
-
private static String rfc1123DS;
private static long rfc1123Sec;
@@ -104,9 +118,7 @@
*/
public static String format1123( Date d ) {
String dstr=null;
- synchronized(rfc1123Format) {
- dstr = format1123(d, rfc1123Format);
- }
+ dstr = format1123(d, rfc1123Format.get());
return dstr;
}
@@ -126,18 +138,14 @@
public static void formatOldCookie( Date d, StringBuffer sb,
FieldPosition fp )
{
- synchronized(oldCookieFormat) {
- oldCookieFormat.format( d, sb, fp );
- }
+ oldCookieFormat.get().format( d, sb, fp );
}
// Called from ServerCookie
public static String formatOldCookie( Date d )
{
String ocf=null;
- synchronized(oldCookieFormat) {
- ocf= oldCookieFormat.format( d );
- }
+ ocf= oldCookieFormat.get().format( d );
return ocf;
}
@@ -146,7 +154,7 @@
Not efficient - but not very used.
*/
public static long parseDate( String dateString ) {
- DateFormat [] format = {rfc1123Format,rfc1036Format,asctimeFormat};
+ DateFormat [] format =
{rfc1123Format.get(),rfc1036Format.get(),asctimeFormat.get()};
return parseDate(dateString,format);
}
public static long parseDate( String dateString, DateFormat []format ) {
Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?rev=781598&r1=781597&r2=781598&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Wed Jun 3 21:59:02 2009
@@ -175,6 +175,9 @@
Correct potential DOS issue in Java AJP connector when processing
invalid request headers. This is CVE-2009-0033. (markt)
</fix>
+ <fix>
+ Make DateTool thread safe. (fhanik)
+ </fix>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]