This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-5285-max-files in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/WW-5285-max-files by this push: new 253cd9f53 WW-5285 Uses Long and null to check if option has been defined 253cd9f53 is described below commit 253cd9f5301c8a4920ccca28e8f8c318b3102352 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Tue Feb 28 07:26:05 2023 +0100 WW-5285 Uses Long and null to check if option has been defined --- .../multipart/AbstractMultiPartRequest.java | 12 +++---- .../multipart/JakartaMultiPartRequest.java | 8 +++-- .../multipart/JakartaStreamMultiPartRequest.java | 37 +++++++++++----------- .../dispatcher/multipart/PellMultiPartRequest.java | 4 +-- 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java index b3410e578..e46cecc00 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java @@ -51,14 +51,12 @@ public abstract class AbstractMultiPartRequest implements MultiPartRequest { /** * Specifies the maximum size of the entire request. */ - protected long maxSize; - protected boolean maxSizeProvided; + protected Long maxSize; /** * Specifies the maximum number of files in one request. */ - protected long maxFiles; - protected boolean maxFilesProvided; + protected Long maxFiles; /** * Specifies the buffer size to use during streaming. @@ -90,13 +88,11 @@ public abstract class AbstractMultiPartRequest implements MultiPartRequest { */ @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE) public void setMaxSize(String maxSize) { - this.maxSizeProvided = true; this.maxSize = Long.parseLong(maxSize); } @Inject(StrutsConstants.STRUTS_MULTIPART_MAXFILES) public void setMaxFiles(String maxFiles) { - this.maxFilesProvided = true; this.maxFiles = Long.parseLong(maxFiles); } @@ -146,9 +142,9 @@ public abstract class AbstractMultiPartRequest implements MultiPartRequest { int forwardSlash = fileName.lastIndexOf('/'); int backwardSlash = fileName.lastIndexOf('\\'); if (forwardSlash != -1 && forwardSlash > backwardSlash) { - fileName = fileName.substring(forwardSlash + 1, fileName.length()); + fileName = fileName.substring(forwardSlash + 1); } else { - fileName = fileName.substring(backwardSlash + 1, fileName.length()); + fileName = fileName.substring(backwardSlash + 1); } return fileName; } 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 c20b1de19..00d922401 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 @@ -160,8 +160,12 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest { protected ServletFileUpload createServletFileUpload(DiskFileItemFactory fac) { ServletFileUpload upload = new ServletFileUpload(fac); - upload.setSizeMax(maxSize); - upload.setFileCountMax(maxFiles); + if (maxSize != null) { + upload.setSizeMax(maxSize); + } + if (maxFiles != null) { + upload.setFileCountMax(maxFiles); + } return upload; } 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 f709b3416..c7311ab0a 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 @@ -30,15 +30,15 @@ import org.apache.struts2.dispatcher.LocalizedMessage; import javax.servlet.http.HttpServletRequest; import java.io.*; +import java.nio.file.Files; import java.util.*; /** * Multi-part form data request adapter for Jakarta Commons FileUpload package that * leverages the streaming API rather than the traditional non-streaming API. - * + * <p> * For more details see WW-3025 * - * @author Chris Cranford * @since 2.3.18 */ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { @@ -85,7 +85,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { types.add(fileInfo.getContentType()); } - return types.toArray(new String[types.size()]); + return types.toArray(new String[0]); } /* (non-Javadoc) @@ -102,7 +102,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { files.add(new StrutsUploadedFile(fileInfo.getFile())); } - return files.toArray(new UploadedFile[files.size()]); + return files.toArray(new UploadedFile[0]); } /* (non-Javadoc) @@ -119,7 +119,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { names.add(getCanonicalName(fileInfo.getOriginalName())); } - return names.toArray(new String[names.size()]); + return names.toArray(new String[0]); } /* (non-Javadoc) @@ -143,7 +143,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { names.add(fileInfo.getFile().getName()); } - return names.toArray(new String[names.size()]); + return names.toArray(new String[0]); } /* (non-Javadoc) @@ -170,7 +170,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { public String[] getParameterValues(String name) { List<String> values = parameters.get(name); if (values != null && values.size() > 0) { - return values.toArray(new String[values.size()]); + return values.toArray(new String[0]); } return null; } @@ -209,10 +209,10 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { // Interface with Commons FileUpload API // Using the Streaming API ServletFileUpload servletFileUpload = new ServletFileUpload(); - if (maxSizeProvided) { + if (maxSize != null) { servletFileUpload.setSizeMax(maxSize); } - if (maxFilesProvided) { + if (maxFiles != null) { servletFileUpload.setFileCountMax(maxFiles); } FileItemIterator i = servletFileUpload.getItemIterator(request); @@ -261,7 +261,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { // if maxSize is specified as -1, there is no sanity check and it's // safe to return true for any request, delegating the failure // checks later in the upload process. - if (maxSize == -1 || request == null) { + if ((maxSize != null && maxSize == -1) || request == null) { return true; } @@ -289,8 +289,9 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { */ protected void addFileSkippedError(String fileName, HttpServletRequest request) { String exceptionMessage = "Skipped file " + fileName + "; request size limit exceeded."; - FileSizeLimitExceededException exception = new FileUploadBase.FileSizeLimitExceededException(exceptionMessage, getRequestSize(request), maxSize); - LocalizedMessage message = buildErrorMessage(exception, new Object[]{fileName, getRequestSize(request), maxSize}); + long allowedMaxSize = maxSize != null ? maxSize : -1; + FileSizeLimitExceededException exception = new FileUploadBase.FileSizeLimitExceededException(exceptionMessage, getRequestSize(request), allowedMaxSize); + LocalizedMessage message = buildErrorMessage(exception, new Object[]{fileName, getRequestSize(request), allowedMaxSize}); if (!errors.contains(message)) { errors.add(message); } @@ -389,12 +390,12 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { * @throws IOException in case of IO errors */ protected boolean streamFileToDisk(FileItemStream itemStream, File file) throws IOException { - boolean result = false; + boolean result; try (InputStream input = itemStream.openStream(); - OutputStream output = new BufferedOutputStream(new FileOutputStream(file), bufferSize)) { + OutputStream output = new BufferedOutputStream(Files.newOutputStream(file.toPath()), bufferSize)) { byte[] buffer = new byte[bufferSize]; LOG.debug("Streaming file using buffer size {}.", bufferSize); - for (int length = 0; ((length = input.read(buffer)) > 0); ) { + for (int length; ((length = input.read(buffer)) > 0); ) { output.write(buffer, 0, length); } result = true; @@ -436,9 +437,9 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest { private static final long serialVersionUID = 1083158552766906037L; - private File file; - private String contentType; - private String originalName; + private final File file; + private final String contentType; + private final String originalName; /** * Default constructor. diff --git a/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java b/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java index aaf1f8b12..a219d4a0f 100644 --- a/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java +++ b/plugins/pell-multipart/src/main/java/org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java @@ -51,7 +51,7 @@ public class PellMultiPartRequest extends AbstractMultiPartRequest { //calling the constructor. See javadoc for MultipartRequest.setEncoding(). synchronized (this) { setEncoding(); - if (maxSizeProvided){ + if (maxSize != null && maxSize > -1){ int intMaxSize = (maxSize >= Integer.MAX_VALUE ? Integer.MAX_VALUE : Long.valueOf(maxSize).intValue()); multi = new ServletMultipartRequest(servletRequest, saveDir, intMaxSize); }else{ @@ -59,7 +59,7 @@ public class PellMultiPartRequest extends AbstractMultiPartRequest { } } } - + public Enumeration getFileParameterNames() { return multi.getFileParameterNames(); }