You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jo...@apache.org on 2007/09/22 22:45:22 UTC

svn commit: r578494 - in /commons/proper/fileupload/trunk/src: changes/changes.xml java/org/apache/commons/fileupload/FileUploadBase.java java/org/apache/commons/fileupload/MultipartStream.java

Author: jochen
Date: Sat Sep 22 13:45:22 2007
New Revision: 578494

URL: http://svn.apache.org/viewvc?rev=578494&view=rev
Log:
A FileSizeLimitExceededException was deferred until the
complete file has been uploaded.
PR: FILEUPLOAD-145

Modified:
    commons/proper/fileupload/trunk/src/changes/changes.xml
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java
    commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/MultipartStream.java

Modified: commons/proper/fileupload/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/changes/changes.xml?rev=578494&r1=578493&r2=578494&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/changes/changes.xml (original)
+++ commons/proper/fileupload/trunk/src/changes/changes.xml Sat Sep 22 13:45:22 2007
@@ -68,6 +68,10 @@
           due-to="Alexander Sova" due-to-email="bird@noir.crocodile.org">
         Short files could cause an unexpected end of the item stream.
       </action>
+      <action dev="jochen" type="fix" issue="FILEUPLOAD-145">
+        A FileSizeLimitExceededException was deferred until the complete
+        file has been uploaded.
+      </action>
     </release>
 
 	<release version="1.2" date="2007-02-13">

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java?rev=578494&r1=578493&r2=578494&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/FileUploadBase.java Sat Sep 22 13:45:22 2007
@@ -28,6 +28,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.fileupload.MultipartStream.ItemInputStream;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.fileupload.servlet.ServletRequestContext;
 import org.apache.commons.fileupload.util.Closeable;
@@ -715,11 +716,13 @@
                 fieldName = pFieldName;
                 contentType = pContentType;
                 formField = pFormField;
-                InputStream istream = multi.newInputStream();
+                final ItemInputStream itemStream = multi.newInputStream();
+                InputStream istream = itemStream;
                 if (fileSizeMax != -1) {
                     istream = new LimitedInputStream(istream, fileSizeMax) {
                         protected void raiseError(long pSizeMax, long pCount)
                                 throws IOException {
+                            itemStream.close(true);
                             FileUploadException e =
                                 new FileSizeLimitExceededException(
                                     "The field " + fieldName

Modified: commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/MultipartStream.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/MultipartStream.java?rev=578494&r1=578493&r2=578494&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/MultipartStream.java (original)
+++ commons/proper/fileupload/trunk/src/java/org/apache/commons/fileupload/MultipartStream.java Sat Sep 22 13:45:22 2007
@@ -897,18 +897,32 @@
          * @throws IOException An I/O error occurred.
          */
         public void close() throws IOException {
+            close(false);
+        }
+
+        /**
+         * Closes the input stream.
+         * @param pCloseUnderlying Whether to close the underlying stream (hard close)
+         * @throws IOException An I/O error occurred.
+         */
+        public void close(boolean pCloseUnderlying) throws IOException {
             if (closed) {
                 return;
             }
-            for (;;) {
-                int av = available();
-                if (av == 0) {
-                    av = makeAvailable();
+            if (pCloseUnderlying) {
+                closed = true;
+                input.close();
+            } else {
+                for (;;) {
+                    int av = available();
                     if (av == 0) {
-                        break;
+                        av = makeAvailable();
+                        if (av == 0) {
+                            break;
+                        }
                     }
+                    skip(av);
                 }
-                skip(av);
             }
             closed = true;
         }