You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by ms...@apache.org on 2001/04/18 16:21:25 UTC

cvs commit: jakarta-struts/src/upload/org/apache/struts/webapp/upload UploadAction.java

mschachter    01/04/18 07:21:25

  Modified:    src/share/org/apache/struts/upload
                        BufferedMultipartInputStream.java
                        MultipartIterator.java
               src/upload/org/apache/struts/webapp/upload UploadAction.java
  Added:       src/share/org/apache/struts/upload
                        ContentLengthExceededException.java
                        MaxLengthExceededException.java
  Log:
   - Added descriptive Exceptions to be thrown when the content lenght or
     maximum length is exceeded
   - Fixed problem with temporary files not being deleted in MultipartIterator
   - Fixed small bug in UploadAction where the input stream wasn't closed
  
  Revision  Changes    Path
  1.3       +3 -6      jakarta-struts/src/share/org/apache/struts/upload/BufferedMultipartInputStream.java
  
  Index: BufferedMultipartInputStream.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/upload/BufferedMultipartInputStream.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BufferedMultipartInputStream.java	2001/04/18 02:27:19	1.2
  +++ BufferedMultipartInputStream.java	2001/04/18 14:21:18	1.3
  @@ -82,8 +82,7 @@
           this.maxSize = maxSize;
           
           if (maxSize < contentLength) {
  -            throw new IOException("Posted Content-Length of " + contentLength +
  -                " bytes exceeds maximum post size of " + maxSize + " bytes");
  +            throw new MaxLengthExceededException(maxSize);
           }
           buffer = new byte[bufferSize];
           fill();
  @@ -141,12 +140,10 @@
       public int read() throws IOException {
           
           if (maxLengthMet) {
  -            throw new IOException("Maximum post length of " + maxSize + " bytes " +
  -                "has been reached");
  +            throw new MaxLengthExceededException(maxSize);
           }
           if (contentLengthMet) {
  -            throw new IOException("Content-Length of " + contentLength + " bytes " +
  -                "has been exceeded");
  +            throw new ContentLengthExceededException(contentLength);
           }
           if (buffer == null) {
               return -1;
  
  
  
  1.12      +26 -19    jakarta-struts/src/share/org/apache/struts/upload/MultipartIterator.java
  
  Index: MultipartIterator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/upload/MultipartIterator.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- MultipartIterator.java	2001/04/18 02:27:18	1.11
  +++ MultipartIterator.java	2001/04/18 14:21:20	1.12
  @@ -483,27 +483,34 @@
           boolean cutCarriage = false;
           boolean cutNewline = false;
           
  -        while ((bytesRead != -1) && (!equals(lineBuffer, 0, boundaryBytes.length,
  -                boundaryBytes))) {
  -         
  -                    if (cutCarriage) {
  -                        fos.write('\r');
  -                    }
  -                    if (cutNewline) {
  -                        fos.write('\n');
  -                    }
  -                    if (bytesRead > 0) {
  -                        if (lineBuffer[bytesRead-1] == '\r') {
  -                            bytesRead--;
  -                            cutCarriage = true;
  +        try {
  +            while ((bytesRead != -1) && (!equals(lineBuffer, 0, boundaryBytes.length,
  +                    boundaryBytes))) {
  +
  +                        if (cutCarriage) {
  +                            fos.write('\r');
                           }
  -                        else {
  -                            cutCarriage = false;
  +                        if (cutNewline) {
  +                            fos.write('\n');
                           }
  -                    }
  -                    cutNewline = true;
  -                    fos.write(lineBuffer, 0, bytesRead);
  -                    bytesRead = inputStream.readLine(lineBuffer, 0, MAX_LINE_SIZE);
  +                        if (bytesRead > 0) {
  +                            if (lineBuffer[bytesRead-1] == '\r') {
  +                                bytesRead--;
  +                                cutCarriage = true;
  +                            }
  +                            else {
  +                                cutCarriage = false;
  +                            }
  +                        }
  +                        cutNewline = true;
  +                        fos.write(lineBuffer, 0, bytesRead);
  +                        bytesRead = inputStream.readLine(lineBuffer, 0, MAX_LINE_SIZE);
  +            }
  +        }
  +        catch (IOException ioe) {
  +            fos.close();
  +            tempFile.delete();
  +            throw ioe;
           }
           
           fos.flush();	
  
  
  
  1.1                  jakarta-struts/src/share/org/apache/struts/upload/ContentLengthExceededException.java
  
  Index: ContentLengthExceededException.java
  ===================================================================
  package org.apache.struts.upload;
  
  import java.io.IOException;
  
  /**
   * This exception is thrown when multipart post data exceeds the value
   * given by the Content-Length header
   */
  public class ContentLengthExceededException extends IOException {
      
      protected String message;
      
      public ContentLengthExceededException() {
          message = "The Content-Length has been exceeded for this request";
      }
      
      public ContentLengthExceededException(long contentLength) {
      
          message = "The Content-Length of " + contentLength + " bytes has been " +
              "exceeded";
      }
      
      public String getMessage() {
          return message;
      }
  }
  
  
  1.1                  jakarta-struts/src/share/org/apache/struts/upload/MaxLengthExceededException.java
  
  Index: MaxLengthExceededException.java
  ===================================================================
  package org.apache.struts.upload;
  
  import java.io.IOException;
  
  /**
   * This exception is thrown when multipart post data exceeds the maximum
   * value set
   */
  public class MaxLengthExceededException extends IOException {
      
      protected String message;
      
      public MaxLengthExceededException() {
          message = "The maximum length has been exceeded for this request";
      }
      
      public MaxLengthExceededException(long maxLength) {
      
          message = "The maximum length of " + maxLength + " bytes has been " +
              "exceeded";
      }
      
      public String getMessage() {
          return message;
      }
  }
  
  
  
  1.4       +6 -4      jakarta-struts/src/upload/org/apache/struts/webapp/upload/UploadAction.java
  
  Index: UploadAction.java
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/src/upload/org/apache/struts/webapp/upload/UploadAction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- UploadAction.java	2001/04/14 12:54:09	1.3
  +++ UploadAction.java	2001/04/18 14:21:23	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-struts/src/upload/org/apache/struts/webapp/upload/UploadAction.java,v 1.3 2001/04/14 12:54:09 rleland Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/04/14 12:54:09 $
  + * $Header: /home/cvs/jakarta-struts/src/upload/org/apache/struts/webapp/upload/UploadAction.java,v 1.4 2001/04/18 14:21:23 mschachter Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/04/18 14:21:23 $
    *
    * ====================================================================
    *
  @@ -87,7 +87,7 @@
    * page to display them
    *
    * @author Mike Schachter
  - * @version $Revision: 1.3 $ $Date: 2001/04/14 12:54:09 $
  + * @version $Revision: 1.4 $ $Date: 2001/04/18 14:21:23 $
    */
   
   
  @@ -155,6 +155,8 @@
                                       bos.close();
                                       data = "The file has been written to \"" + theForm.getFilePath() + "\"";
                                   }
  +                                //close the stream
  +                                stream.close();
                           }
                           catch (FileNotFoundException fnfe) {
                                   return null;