[ 
https://issues.apache.org/jira/browse/FILEUPLOAD-160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12633823#action_12633823
 ] 

Stepan Koltsov commented on FILEUPLOAD-160:
-------------------------------------------

Hello!

> 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