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.