From b490e2c2fc7640ab707a89a2e67083450db74dc9 Mon Sep 17 00:00:00 2001 From: Ryan J Murphy Date: Thu, 11 Dec 2025 04:48:13 -0700 Subject: [PATCH] Merge pull request #1445 from ryanmurf/multipartCleanup WW-5573 Multipart stream file cleanup --- .../multipart/JakartaMultiPartRequest.java | 9 ++++----- .../multipart/JakartaStreamMultiPartRequest.java | 14 ++++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java index d27b2159d..542469ead 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java @@ -103,12 +103,11 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { protected void processUpload(HttpServletRequest request, String saveDir) throws FileUploadException, UnsupportedEncodingException { if (ServletFileUpload.isMultipartContent(request)) { - for (FileItem item : parseRequest(request, saveDir)) { + // Track all FileItem instances for comprehensive cleanup - addAll in case exception in for loop + allFileItems.addAll(parseRequest(request, saveDir)); + for (FileItem item : allFileItems) { LOG.debug("Found file item: [{}]", normalizeSpace(item.getFieldName())); - - // Track all FileItem instances for comprehensive cleanup - allFileItems.add(item); - + if (item.isFormField()) { processNormalFormField(item, request.getCharacterEncoding()); } else { diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java index 70eeb8e2a..3d0cdb8d7 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java @@ -76,10 +76,16 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { LOG.debug("Performing File Upload temporary storage cleanup."); for (List fileInfoList : fileInfos.values()) { for (FileInfo fileInfo : fileInfoList) { - File file = fileInfo.getFile(); - LOG.debug("Deleting file '{}'.", file.getName()); - if (!file.delete()) { - LOG.warn("There was a problem attempting to delete file [{}].", file.getName()); + try { + // catch any exceptions during cleanup to ensure all files are deleted. + File file = fileInfo.getFile(); + LOG.debug("Deleting file '{}'.", file.getName()); + if (!file.delete()) { + LOG.warn("There was a problem attempting to delete file [{}].", + file.getName()); + } + } catch (Exception e) { + LOG.warn("Error during cleanup of file item: [{}]", normalizeSpace(fileInfo.getOriginalName()), e); } } }