This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch release/struts-6-8-x
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/release/struts-6-8-x by this 
push:
     new b490e2c2f Merge pull request #1445 from ryanmurf/multipartCleanup
b490e2c2f is described below

commit b490e2c2fc7640ab707a89a2e67083450db74dc9
Author: Ryan J Murphy <[email protected]>
AuthorDate: Thu Dec 11 04:48:13 2025 -0700

    Merge pull request #1445 from ryanmurf/multipartCleanup
    
    WW-5573  Multipart stream file cleanup
---
 .../dispatcher/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<FileInfo> 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);
                 }
             }
         }

Reply via email to