Author: markt
Date: Mon Oct 27 05:56:37 2008
New Revision: 708160
URL: http://svn.apache.org/viewvc?rev=708160&view=rev
Log:
Fix some thread safety issues in date formatting.
Modified:
tomcat/tc6.0.x/trunk/STATUS.txt
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/MessageBytes.java
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/ServerCookie.java
tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=708160&r1=708159&r2=708160&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Mon Oct 27 05:56:37 2008
@@ -166,13 +166,6 @@
}
StringBuffer sb = new StringBuffer();
-* Fix some thread safety issues.
- Deprecate (rather than delete) any deleted code that isn't already deprecated
- http://svn.apache.org/viewvc?rev=699714&view=rev (previous patch)
- http://svn.apache.org/viewvc?rev=700167&view=rev (additional changes)
- +1: mark, remm,fhanik
- -1:
-
* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45933
Don't use xml parser from web-app to process tld files
http://svn.apache.org/viewvc?rev=701355&view=rev
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java?rev=708160&r1=708159&r2=708160&view=diff
==============================================================================
---
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java
(original)
+++
tomcat/tc6.0.x/trunk/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java
Mon Oct 27 05:56:37 2008
@@ -20,6 +20,10 @@
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+import java.util.TimeZone;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
@@ -27,7 +31,6 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
-import org.apache.catalina.util.DateTool;
/**
* A HttpServletResponseWrapper, used from
* <code>SSIServletExternalResolver</code>
@@ -42,6 +45,9 @@
*/
private static final String CONTENT_TYPE = "content-type";
private static final String LAST_MODIFIED = "last-modified";
+ private static final DateFormat RFC1123_FORMAT;
+ private final static String RFC1123_PATTERN = "EEE, dd MMM yyyy HH:mm:ss
z";
+
protected long lastModified = -1;
private String contentType = null;
@@ -55,7 +61,11 @@
private ServletContext context;
private HttpServletRequest request;
-
+ static {
+ RFC1123_FORMAT = new SimpleDateFormat(RFC1123_PATTERN, Locale.US);
+ RFC1123_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));
+ }
+
/**
* Initialize our wrapper with the current HttpServletResponse and
* ServletOutputStream.
@@ -208,7 +218,9 @@
String lname = name.toLowerCase();
if (lname.equals(LAST_MODIFIED)) {
try {
- lastModified = DateTool.rfc1123Format.parse(value).getTime();
+ synchronized(RFC1123_FORMAT) {
+ lastModified = RFC1123_FORMAT.parse(value).getTime();
+ }
} catch (Throwable ignore) { }
} else if (lname.equals(CONTENT_TYPE)) {
contentType = value;
@@ -228,7 +240,9 @@
String lname = name.toLowerCase();
if (lname.equals(LAST_MODIFIED)) {
try {
- lastModified = DateTool.rfc1123Format.parse(value).getTime();
+ synchronized(RFC1123_FORMAT) {
+ lastModified = RFC1123_FORMAT.parse(value).getTime();
+ }
} catch (Throwable ignore) { }
}
else if (lname.equals(CONTENT_TYPE))
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/MessageBytes.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/MessageBytes.java?rev=708160&r1=708159&r2=708160&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/MessageBytes.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/buf/MessageBytes.java Mon
Oct 27 05:56:37 2008
@@ -568,6 +568,9 @@
type=T_STR;
}
+ /**
+ * @deprecated
+ */
public void setTime(long t) {
setTime( t, null );
}
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/ServerCookie.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/ServerCookie.java?rev=708160&r1=708159&r2=708160&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/ServerCookie.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/ServerCookie.java Mon
Oct 27 05:56:37 2008
@@ -18,11 +18,14 @@
package org.apache.tomcat.util.http;
import java.io.Serializable;
+import java.text.DateFormat;
import java.text.FieldPosition;
+import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.buf.DateTool;
import org.apache.tomcat.util.buf.MessageBytes;
@@ -51,6 +54,19 @@
private int maxAge = -1;
private int version = 0;
+ // Other fields
+ private static final String OLD_COOKIE_PATTERN =
+ "EEE, dd-MMM-yyyy HH:mm:ss z";
+ private static final DateFormat OLD_COOKIE_FORMAT;
+ private static final String ancientDate;
+
+
+ static {
+ OLD_COOKIE_FORMAT = new SimpleDateFormat(OLD_COOKIE_PATTERN,
Locale.US);
+ OLD_COOKIE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));
+ ancientDate = OLD_COOKIE_FORMAT.format(new Date(10000));
+ }
+
/**
* If set to true, we parse cookies according to the servlet spec,
*/
@@ -245,9 +261,6 @@
}
}
- private static final String ancientDate =
- DateTool.formatOldCookie(new Date(10000));
-
// TODO RFC2965 fields also need to be passed
public static void appendCookieValue( StringBuffer headerBuf,
int version,
@@ -295,10 +308,12 @@
if (maxAge == 0)
buf.append( ancientDate );
else
- DateTool.formatOldCookie
- (new Date( System.currentTimeMillis() +
- maxAge *1000L), buf,
- new FieldPosition(0));
+ synchronized (OLD_COOKIE_FORMAT) {
+ OLD_COOKIE_FORMAT.format(
+ new Date(System.currentTimeMillis() +
+ maxAge*1000L),
+ buf, new FieldPosition(0));
+ }
} else {
buf.append ("; Max-Age=");
Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=708160&r1=708159&r2=708160&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Mon Oct 27 05:56:37 2008
@@ -117,6 +117,9 @@
<fix>
Fix cast error in JULI log factory. (markt)
</fix>
+ <fix>
+ Fix some thread safety issues in date formatting. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]