Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Erdfelt2016-01-22 16:07:51 -0500
committerJoakim Erdfelt2016-01-22 16:07:51 -0500
commit734d18fb93da4f363acca96bd78ca6ca0f4b577b (patch)
tree881ec811123465386171f383c42d160c799e13d8
parent288f2e1f5190b2efa9ba998e3e4f864921a374cc (diff)
downloadorg.eclipse.jetty.project-734d18fb93da4f363acca96bd78ca6ca0f4b577b.tar.gz
org.eclipse.jetty.project-734d18fb93da4f363acca96bd78ca6ca0f4b577b.tar.xz
org.eclipse.jetty.project-734d18fb93da4f363acca96bd78ca6ca0f4b577b.zip
486394 - MultipartConfig.fileSizeThreshold default of 0 should always create a file
+ Refactored fileSizeThreshold logic so that a configuration value of 0 is always create file (negative) is never create file positive is tested against filesize
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/MultiPartInputStreamParser.java30
1 files changed, 28 insertions, 2 deletions
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/MultiPartInputStreamParser.java b/jetty-util/src/main/java/org/eclipse/jetty/util/MultiPartInputStreamParser.java
index 946d708c30..95fbcd635e 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/MultiPartInputStreamParser.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/MultiPartInputStreamParser.java
@@ -40,6 +40,7 @@ import java.util.List;
import java.util.Locale;
import javax.servlet.MultipartConfigElement;
+import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.Part;
import org.eclipse.jetty.util.log.Log;
@@ -112,7 +113,7 @@ public class MultiPartInputStreamParser
if (MultiPartInputStreamParser.this._config.getMaxFileSize() > 0 && _size + 1 > MultiPartInputStreamParser.this._config.getMaxFileSize())
throw new IllegalStateException ("Multipart Mime part "+_name+" exceeds max filesize");
- if (MultiPartInputStreamParser.this._config.getFileSizeThreshold() > 0 && _size + 1 > MultiPartInputStreamParser.this._config.getFileSizeThreshold() && _file==null)
+ if (_file == null && MultiPartInputStreamParser.this.isFileNeeded(_size + 1))
createFile();
_out.write(b);
@@ -125,7 +126,7 @@ public class MultiPartInputStreamParser
if (MultiPartInputStreamParser.this._config.getMaxFileSize() > 0 && _size + length > MultiPartInputStreamParser.this._config.getMaxFileSize())
throw new IllegalStateException ("Multipart Mime part "+_name+" exceeds max filesize");
- if (MultiPartInputStreamParser.this._config.getFileSizeThreshold() > 0 && _size + length > MultiPartInputStreamParser.this._config.getFileSizeThreshold() && _file==null)
+ if (_file == null && MultiPartInputStreamParser.this.isFileNeeded(_size + length))
createFile();
_out.write(bytes, offset, length);
@@ -430,6 +431,31 @@ public class MultiPartInputStreamParser
/**
+ * Test to determine if the file content sizes exceeds the {@link MultipartConfig#fileSizeThreshold()}
+ * necessary to produce a file on disk
+ * <p>
+ * Configured {@link MultipartConfig#fileSizeThreshold()} of <code>0</code> is always true, negative is always false,
+ * all other configurations are tested against <code>size</code> parameter
+ *
+ * @param size the file size to test against.
+ * @return true if file is needed, false otherwise
+ */
+ protected boolean isFileNeeded(long size)
+ {
+ if (_config.getFileSizeThreshold() < 0)
+ {
+ // Negative file size threshold means no file, ever
+ return false;
+ }
+ if (_config.getFileSizeThreshold() == 0)
+ {
+ // 0 means always create a file
+ return true;
+ }
+ return size > _config.getFileSizeThreshold();
+ }
+
+ /**
* Parse, if necessary, the multipart stream.
*
* @throws IOException if unable to parse

Back to the top