This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch release/struts-2-5-x in repository https://gitbox.apache.org/repos/asf/struts.git
commit bf54436869c264941dd192c752a4abfaa65d3711 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Sun Sep 3 08:52:11 2023 +0200 Always delete uploaded file --- .../multipart/JakartaMultiPartRequest.java | 77 ++++++++++++---------- 1 file changed, 43 insertions(+), 34 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 5b03a262e..408bcb0d5 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 @@ -35,7 +35,13 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Multipart form data request adapter for Jakarta Commons Fileupload package. @@ -64,7 +70,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { } catch (FileUploadException e) { LOG.warn("Request exceeded size limit!", e); LocalizedMessage errorMessage; - if(e instanceof FileUploadBase.SizeLimitExceededException) { + if (e instanceof FileUploadBase.SizeLimitExceededException) { FileUploadBase.SizeLimitExceededException ex = (FileUploadBase.SizeLimitExceededException) e; errorMessage = buildErrorMessage(e, new Object[]{ex.getPermittedSize(), ex.getActualSize()}); } else { @@ -100,7 +106,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { LOG.debug("Item is a file upload"); // Skip file uploads that don't have a file name - meaning that no file was selected. - if (item.getName() == null || item.getName().trim().length() < 1) { + if (item.getName() == null || item.getName().trim().isEmpty()) { LOG.debug("No file has been uploaded for the field: {}", item.getFieldName()); return; } @@ -117,39 +123,42 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { } protected void processNormalFormField(FileItem item, String charset) throws UnsupportedEncodingException { - LOG.debug("Item is a normal form field"); + try { + LOG.debug("Item is a normal form field"); - List<String> values; - if (params.get(item.getFieldName()) != null) { - values = params.get(item.getFieldName()); - } else { - values = new ArrayList<>(); - } + List<String> values; + if (params.get(item.getFieldName()) != null) { + values = params.get(item.getFieldName()); + } else { + values = new ArrayList<>(); + } - long size = item.getSize(); - if (size == 0) { - values.add(StringUtils.EMPTY); - } else if (size > maxStringLength) { - String errorKey = "struts.messages.upload.error.parameter.too.long"; - LocalizedMessage localizedMessage = new LocalizedMessage(this.getClass(), errorKey, null, - new Object[] { item.getFieldName(), maxStringLength, size }); + long size = item.getSize(); + if (size == 0) { + values.add(StringUtils.EMPTY); + } else if (size > maxStringLength) { + String errorKey = "struts.messages.upload.error.parameter.too.long"; + LocalizedMessage localizedMessage = new LocalizedMessage(this.getClass(), errorKey, null, + new Object[]{item.getFieldName(), maxStringLength, size}); - if (!errors.contains(localizedMessage)) { - errors.add(localizedMessage); - } - return; + if (!errors.contains(localizedMessage)) { + errors.add(localizedMessage); + } + return; - } else if (charset != null) { - values.add(item.getString(charset)); - } else { - // note: see http://jira.opensymphony.com/browse/WW-633 - // basically, in some cases the charset may be null, so - // we're just going to try to "other" method (no idea if this - // will work) - values.add(item.getString()); + } else if (charset != null) { + values.add(item.getString(charset)); + } else { + // note: see https://issues.apache.org/jira/browse/WW-633 + // basically, in some cases the charset may be null, so + // we're just going to try to "other" method (no idea if this + // will work) + values.add(item.getString()); + } + params.put(item.getFieldName(), values); + } finally { + item.delete(); } - params.put(item.getFieldName(), values); - item.delete(); } protected List<FileItem> parseRequest(HttpServletRequest servletRequest, String saveDir) throws FileUploadException { @@ -323,14 +332,14 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { } /* (non-Javadoc) - * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#cleanUp() - */ + * @see org.apache.struts2.dispatcher.multipart.MultiPartRequest#cleanUp() + */ public void cleanUp() { Set<String> names = files.keySet(); for (String name : names) { List<FileItem> items = files.get(name); for (FileItem item : items) { - LOG.debug("Removing file {} {}", name, item ); + LOG.debug("Removing file {} {}", name, item); if (!item.isInMemory()) { item.delete(); }