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="[EMAIL PROTECTED]"> 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; }