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

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


The following commit(s) were added to refs/heads/release/struts-6-7-x by this 
push:
     new 84a51cce0 WW-5546 Fixes NPE when uploaded file is empty (#1262)
84a51cce0 is described below

commit 84a51cce0e9ea3e04c5b3793faef95a5d5b4ebcd
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Tue May 6 20:48:24 2025 +0200

    WW-5546 Fixes NPE when uploaded file is empty (#1262)
---
 .../interceptor/AbstractFileUploadInterceptor.java |  2 +-
 .../ActionFileUploadInterceptorTest.java           | 63 ++++++++++++++++++++++
 .../interceptor/FileUploadInterceptorTest.java     | 63 ++++++++++++++++++++++
 3 files changed, 127 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java
 
b/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java
index ecebd3748..a905e00cb 100644
--- 
a/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java
+++ 
b/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java
@@ -116,7 +116,7 @@ public abstract class AbstractFileUploadInterceptor extends 
AbstractInterceptor
         }
 
         // If it's null the upload failed
-        if (file == null) {
+        if (file == null || file.getContent() == null) {
             String errMsg = getTextMessage(action, 
STRUTS_MESSAGES_ERROR_UPLOADING_KEY, new String[]{inputName});
             if (validation != null) {
                 validation.addFieldError(inputName, errMsg);
diff --git 
a/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
 
b/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
index 869deeed5..1e054753e 100644
--- 
a/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
+++ 
b/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
@@ -98,6 +98,53 @@ public class ActionFileUploadInterceptorTest extends 
StrutsInternalTestCase {
         }
     };
 
+    public static final UploadedFile NULL_CONTENT = new UploadedFile() {
+        @Override
+        public Long length() {
+            return 0L;
+        }
+
+        @Override
+        public String getName() {
+            return "";
+        }
+
+        @Override
+        public boolean isFile() {
+            return false;
+        }
+
+        @Override
+        public boolean delete() {
+            return false;
+        }
+
+        @Override
+        public String getAbsolutePath() {
+            return null;
+        }
+
+        @Override
+        public File getContent() {
+            return null;
+        }
+
+        @Override
+        public String getOriginalName() {
+            return null;
+        }
+
+        @Override
+        public String getContentType() {
+            return null;
+        }
+
+        @Override
+        public String getInputName() {
+            return null;
+        }
+    };
+
     private ActionFileUploadInterceptor interceptor;
     private File tempDir;
 
@@ -205,6 +252,22 @@ public class ActionFileUploadInterceptorTest extends 
StrutsInternalTestCase {
         assertTrue(msg.indexOf("inputName") > 0);
     }
 
+    public void testAcceptFileWithNoContent() {
+        interceptor.setAllowedTypes("text/plain");
+
+        ValidationAwareSupport validation = new ValidationAwareSupport();
+        boolean notOk = interceptor.acceptFile(validation, NULL_CONTENT, 
"filename.html", "text/plain", "inputName");
+
+        assertFalse(notOk);
+        assertFalse(validation.getFieldErrors().isEmpty());
+        assertTrue(validation.hasErrors());
+        List<String> errors = validation.getFieldErrors().get("inputName");
+        assertEquals(1, errors.size());
+        String msg = errors.get(0);
+        assertTrue(msg.startsWith("Error uploading:"));
+        assertTrue(msg.indexOf("inputName") > 0);
+    }
+
     public void testAcceptFileWithMaxSize() throws Exception {
         interceptor.setMaximumSize(10L);
 
diff --git 
a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
 
b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
index c4b03ad0b..8b64ccb43 100644
--- 
a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
+++ 
b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
@@ -100,6 +100,53 @@ public class FileUploadInterceptorTest extends 
StrutsInternalTestCase {
         }
     };
 
+    public static final UploadedFile NULL_CONTENT = new UploadedFile() {
+        @Override
+        public Long length() {
+            return 0L;
+        }
+
+        @Override
+        public String getName() {
+            return "";
+        }
+
+        @Override
+        public boolean isFile() {
+            return false;
+        }
+
+        @Override
+        public boolean delete() {
+            return false;
+        }
+
+        @Override
+        public String getAbsolutePath() {
+            return null;
+        }
+
+        @Override
+        public File getContent() {
+            return null;
+        }
+
+        @Override
+        public String getOriginalName() {
+            return null;
+        }
+
+        @Override
+        public String getContentType() {
+            return null;
+        }
+
+        @Override
+        public String getInputName() {
+            return null;
+        }
+    };
+
     private FileUploadInterceptor interceptor;
     private File tempDir;
 
@@ -202,6 +249,22 @@ public class FileUploadInterceptorTest extends 
StrutsInternalTestCase {
         assertTrue(msg.indexOf("inputName") > 0);
     }
 
+    public void testAcceptFileWithNoContent() {
+        interceptor.setAllowedTypes("text/plain");
+
+        ValidationAwareSupport validation = new ValidationAwareSupport();
+        boolean notOk = interceptor.acceptFile(validation, NULL_CONTENT, 
"filename.html", "text/plain", "inputName");
+
+        assertFalse(notOk);
+        assertFalse(validation.getFieldErrors().isEmpty());
+        assertTrue(validation.hasErrors());
+        List<String> errors = validation.getFieldErrors().get("inputName");
+        assertEquals(1, errors.size());
+        String msg = errors.get(0);
+        assertTrue(msg.startsWith("Error uploading:"));
+        assertTrue(msg.indexOf("inputName") > 0);
+    }
+
     public void testAcceptFileWithMaxSize() throws Exception {
         interceptor.setMaximumSize(10L);
 

Reply via email to