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 <[email protected]>
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);