You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Rob Tompkins (JIRA)" <ji...@apache.org> on 2017/06/05 13:55:04 UTC

[jira] [Closed] (FILEUPLOAD-160) disk leak if multipart parse error

     [ https://issues.apache.org/jira/browse/FILEUPLOAD-160?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rob Tompkins closed FILEUPLOAD-160.
-----------------------------------

1.2.2 Released.

> 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
>            Assignee: Jochen Wiedmann
>             Fix For: 1.2.2
>
>
> 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 was sent by Atlassian JIRA
(v6.3.15#6346)