Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse McConnell2013-05-20 11:47:08 +0000
committerJesse McConnell2013-05-20 11:47:08 +0000
commit4cba93e8d4decb142aa605da1a429994a6fb8037 (patch)
tree5f72ba9b00dd80dfc88096766331d20f3b64e307
parent67f55ec8e5d7a8ee6c8356e46d00c53afb43a569 (diff)
parent13c56e81f5ae7f4d0989945a4594cf88fd96e9e1 (diff)
downloadorg.eclipse.jetty.project-4cba93e8d4decb142aa605da1a429994a6fb8037.tar.gz
org.eclipse.jetty.project-4cba93e8d4decb142aa605da1a429994a6fb8037.tar.xz
org.eclipse.jetty.project-4cba93e8d4decb142aa605da1a429994a6fb8037.zip
Merge branch 'jetty-7' into release-7
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java55
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java19
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java28
-rw-r--r--jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java9
-rw-r--r--jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java33
5 files changed, 91 insertions, 53 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
index b6866a0dbe..4e643a15c7 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
@@ -37,6 +37,7 @@ import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.log.Logger;
@@ -520,8 +521,7 @@ public class HashSessionManager extends AbstractSessionManager
}
finally
{
- if (in != null)
- try {in.close();} catch (Exception x) {__log.ignore(x);}
+ if (in != null) IO.close(in);
if (error != null)
{
@@ -568,30 +568,41 @@ public class HashSessionManager extends AbstractSessionManager
* defaultReadObject
*/
DataInputStream in = new DataInputStream(is);
- String clusterId = in.readUTF();
- in.readUTF(); // nodeId
- long created = in.readLong();
- long accessed = in.readLong();
- int requests = in.readInt();
-
- if (session == null)
- session = (HashedSession)newSession(created, accessed, clusterId);
- session.setRequests(requests);
- int size = in.readInt();
- if (size>0)
+ try
{
- ClassLoadingObjectInputStream ois = new ClassLoadingObjectInputStream(in);
- for (int i=0; i<size;i++)
+ String clusterId = in.readUTF();
+ in.readUTF(); // nodeId
+ long created = in.readLong();
+ long accessed = in.readLong();
+ int requests = in.readInt();
+
+ if (session == null)
+ session = (HashedSession)newSession(created, accessed, clusterId);
+ session.setRequests(requests);
+ int size = in.readInt();
+ if (size>0)
{
- String key = ois.readUTF();
- Object value = ois.readObject();
- session.setAttribute(key,value);
+ ClassLoadingObjectInputStream ois = new ClassLoadingObjectInputStream(in);
+ try
+ {
+ for (int i=0; i<size;i++)
+ {
+ String key = ois.readUTF();
+ Object value = ois.readObject();
+ session.setAttribute(key,value);
+ }
+ }
+ finally
+ {
+ IO.close(ois);
+ }
}
- ois.close();
+ return session;
+ }
+ finally
+ {
+ IO.close(in);
}
- else
- in.close();
- return session;
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java
index 173c29617e..3a60680b60 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashedSession.java
@@ -121,6 +121,7 @@ public class HashedSession extends AbstractSession
fos = new FileOutputStream(file);
willPassivate();
save(fos);
+ IO.close(fos);
if (reactivate)
didActivate();
else
@@ -129,14 +130,9 @@ public class HashedSession extends AbstractSession
catch (Exception e)
{
saveFailed(); // We won't try again for this session
- if (fos != null)
- {
- // Must not leave the file open if the saving failed
- IO.close(fos);
- // No point keeping the file if we didn't save the whole session
- file.delete();
- throw e;
- }
+ if (fos != null) IO.close(fos);
+ if (file != null) file.delete(); // No point keeping the file if we didn't save the whole session
+ throw e;
}
}
}
@@ -192,9 +188,10 @@ public class HashedSession extends AbstractSession
fis = new FileInputStream(file);
_idled = false;
_hashSessionManager.restoreSession(fis, this);
-
- didActivate();
+ IO.close(fis);
+ didActivate();
+
// If we are doing period saves, then there is no point deleting at this point
if (_hashSessionManager._savePeriodMs == 0)
file.delete();
@@ -202,7 +199,7 @@ public class HashedSession extends AbstractSession
catch (Exception e)
{
LOG.warn("Problem de-idling session " + super.getId(), e);
- IO.close(fis);
+ if (fis != null) IO.close(fis);//Must ensure closed before invalidate
invalidate();
}
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
index a72c0702b0..1a10ba6852 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
@@ -516,24 +516,18 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
*/
@Override
public void doStart()
- {
- try
- {
- initializeDatabase();
- prepareTables();
- cleanExpiredSessions();
- super.doStart();
- if (LOG.isDebugEnabled())
- LOG.debug("Scavenging interval = "+getScavengeInterval()+" sec");
- _timer=new Timer("JDBCSessionScavenger", true);
- setScavengeInterval(getScavengeInterval());
- }
- catch (Exception e)
- {
- LOG.warn("Problem initialising JettySessionIds table", e);
- }
+ throws Exception
+ {
+ initializeDatabase();
+ prepareTables();
+ cleanExpiredSessions();
+ super.doStart();
+ if (LOG.isDebugEnabled())
+ LOG.debug("Scavenging interval = "+getScavengeInterval()+" sec");
+ _timer=new Timer("JDBCSessionScavenger", true);
+ setScavengeInterval(getScavengeInterval());
}
-
+
/**
* Stop the scavenger.
*/
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
index fea6d37049..c872e936fa 100644
--- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
@@ -125,8 +125,13 @@ public class MultiPartFilter implements Filter
// TODO - handle encodings
String contentTypeBoundary = "";
- if (content_type.indexOf("boundary=") >= 0)
- contentTypeBoundary = QuotedStringTokenizer.unquote(value(content_type.substring(content_type.indexOf("boundary="))).trim());
+ int bstart = content_type.indexOf("boundary=");
+ if (bstart >= 0)
+ {
+ int bend = content_type.indexOf(";", bstart);
+ bend = (bend < 0? content_type.length(): bend);
+ contentTypeBoundary = QuotedStringTokenizer.unquote(value(content_type.substring(bstart,bend)).trim());
+ }
String boundary="--"+contentTypeBoundary;
diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java
index d41228a150..5f12d70442 100644
--- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java
+++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java
@@ -164,7 +164,38 @@ public class MultipartFilterTest
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
assertTrue(response.getContent().indexOf("brown cow")>=0);
}
-
+
+
+ @Test
+ public void testContentTypeWithCharset() throws Exception
+ {
+ // generated and parsed test
+ HttpTester request = new HttpTester();
+ HttpTester response = new HttpTester();
+
+ // test GET
+ request.setMethod("POST");
+ request.setVersion("HTTP/1.0");
+ request.setHeader("Host","tester");
+ request.setURI("/context/dump");
+
+ String boundary="XyXyXy";
+ request.setHeader("Content-Type","multipart/form-data; boundary=\""+boundary+"\"; charset=ISO-8859-1");
+
+
+ String content = "--" + boundary + "\r\n"+
+ "Content-Disposition: form-data; name=\"fileup\"; filename=\"test.upload\"\r\n"+
+ "Content-Type: application/octet-stream\r\n\r\n"+
+ "How now brown cow."+
+ "\r\n--" + boundary + "--\r\n\r\n";
+
+ request.setContent(content);
+
+ response.parse(tester.getResponses(request.generate()));
+ assertTrue(response.getMethod()==null);
+ assertEquals(HttpServletResponse.SC_OK,response.getStatus());
+ assertTrue(response.getContent().indexOf("brown cow")>=0);
+ }
@Test
public void testEncodedPost() throws Exception

Back to the top