[FILEUPLOAD-212] - Insecure request size checking - fix provided by (and credited to) Thomas Neidhart

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/fileupload/trunk@1455031 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index fd2b4cf..6768f03 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -63,6 +63,7 @@
  * [FILEUPLOAD-195] - Error reading the file size larger than 2 gb
  * [FILEUPLOAD-197] - ServletFileUpload isMultipartContent method does not support HTTP PUT
  * [FILEUPLOAD-204] - FileItem.getHeaders() returns always null.
+ * [FILEUPLOAD-212] - Insecure request size checking
  * [FILEUPLOAD-214] - ServletFileUpload only accepts POST requests
 
 Improvement
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e6b0095..5ffb20e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -97,6 +97,9 @@
       <action issue="FILEUPLOAD-204" dev="jochen" type="fix" due-to="Hakju Oh">
         FileItem.getHeaders() returns always null.
       </action>
+      <action issue="FILEUPLOAD-204" dev="tn" type="fix" due-to="Damian Kolasa">
+        Insecure request size checking
+      </action>
       <action issue="FILEUPLOAD-214" dev="simonetripodi" type="fix" due-to="Matthew Runo">
         ServletFileUpload only accepts POST requests
       </action>
diff --git a/src/main/java/org/apache/commons/fileupload/FileUploadBase.java b/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
index bb0e7dc..ca1bc8b 100644
--- a/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
+++ b/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
@@ -919,26 +919,25 @@
 
             if (sizeMax >= 0) {
                 long requestSize = ctx.contentLength();
-                if (requestSize == -1) {
-                    input = new LimitedInputStream(input, sizeMax) {
-                        @Override
-                        protected void raiseError(long pSizeMax, long pCount)
-                                throws IOException {
-                            FileUploadException ex = new SizeLimitExceededException(
-                            format("the request was rejected because its size (%s) exceeds the configured maximum (%s)",
-                                   pCount, pSizeMax),
-                                   pCount, pSizeMax);
-                            throw new FileUploadIOException(ex);
-                        }
-                    };
-                } else {
-                    if (sizeMax >= 0 && requestSize > sizeMax) {
+                if (requestSize != -1) {
+                    if (requestSize > sizeMax) {
                         throw new SizeLimitExceededException(
                             format("the request was rejected because its size (%s) exceeds the configured maximum (%s)",
                                    requestSize, sizeMax),
                                    requestSize, sizeMax);
                     }
                 }
+                input = new LimitedInputStream(input, sizeMax) {
+                    @Override
+                    protected void raiseError(long pSizeMax, long pCount)
+                            throws IOException {
+                        FileUploadException ex = new SizeLimitExceededException(
+                        format("the request was rejected because its size (%s) exceeds the configured maximum (%s)",
+                               pCount, pSizeMax),
+                               pCount, pSizeMax);
+                        throw new FileUploadIOException(ex);
+                    }
+                };
             }
 
             String charEncoding = headerEncoding;