disk leak if multipart parse error
----------------------------------

                 Key: FILEUPLOAD-160
                 URL: https://issues.apache.org/jira/browse/FILEUPLOAD-160
             Project: Commons FileUpload
          Issue Type: Bug
            Reporter: Stepan Koltsov


FleUploadBase.parseRequest() keeps files on disk if parser error occured. Patch

{code}
diff -r cf24bc636e09 -r f706d95f56b7 
src/java/org/apache/commons/fileupload/FileUploadBase.java
--- a/src/java/org/apache/commons/fileupload/FileUploadBase.java        Wed May 
28 22:25:00 2008 +0400
+++ b/src/java/org/apache/commons/fileupload/FileUploadBase.java        Thu May 
29 15:40:04 2008 +0400
@@ -345,9 +345,10 @@
      */
     public List /* FileItem */ parseRequest(RequestContext ctx)
             throws FileUploadException {
+        List items = new ArrayList();
+        boolean successful = false;
         try {
             FileItemIterator iter = getItemIterator(ctx);
-            List items = new ArrayList();
             FileItemFactory fac = getFileItemFactory();
             if (fac == null) {
                 throw new NullPointerException(
@@ -358,6 +359,7 @@
                 FileItem fileItem = fac.createItem(item.getFieldName(),
                         item.getContentType(), item.isFormField(),
                         item.getName());
+                items.add(fileItem);
                 try {
                     Streams.copy(item.openStream(), fileItem.getOutputStream(),
                             true);
@@ -372,13 +374,24 @@
                     final FileItemHeaders fih = item.getHeaders();
                     ((FileItemHeadersSupport) fileItem).setHeaders(fih);
                 }
-                items.add(fileItem);
             }
+            successful = true;
             return items;
         } catch (FileUploadIOException e) {
             throw (FileUploadException) e.getCause();
         } catch (IOException e) {
             throw new FileUploadException(e.getMessage(), e);
+        } finally {
+            if (!successful) {
+                for (Iterator iterator = items.iterator(); 
iterator.hasNext();) {
+                    FileItem fileItem = (FileItem) iterator.next();
+                    try {
+                        fileItem.delete();
+                    } catch (Throwable e) {
+                        // ignore it
+                    }
+                }
+            }
         }
     }
 
{code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to