This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-fileupload.git
The following commit(s) were added to refs/heads/master by this push: new e5320f1 DiskFileItem#get() throws ArithmeticException if the file size overflows an int e5320f1 is described below commit e5320f1c02f56d4c33298918d48c2b0eb816bbb8 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Thu May 25 09:24:47 2023 -0400 DiskFileItem#get() throws ArithmeticException if the file size overflows an int --- .../commons/fileupload2/disk/DiskFileItem.java | 7 +- .../jakarta/JakartaMockHttpServletRequest.java | 12 +- .../jakarta/JakartaMockServletHttpRequest.java | 142 ++++++++++----------- .../javax/JavaxMockHttpServletRequest.java | 12 +- 4 files changed, 72 insertions(+), 101 deletions(-) diff --git a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java index ce2a2e9..ee44756 100644 --- a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java +++ b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/disk/DiskFileItem.java @@ -220,8 +220,9 @@ public class DiskFileItem implements FileItem { * Gets the contents of the file as an array of bytes. If the contents of the file were not yet cached in memory, they will be loaded from the disk storage * and cached. * - * @return The contents of the file as an array of bytes or {@code null} if the data cannot be read - * @throws UncheckedIOException if an I/O error occurs + * @return The contents of the file as an array of bytes or {@code null} if the data cannot be read. + * @throws UncheckedIOException if an I/O error occurs. + * @throws ArithmeticException if the file {@code size} overflows an int. */ @Override public byte[] get() throws UncheckedIOException { @@ -232,7 +233,7 @@ public class DiskFileItem implements FileItem { return cachedContent != null ? cachedContent.clone() : new byte[0]; } - final byte[] fileData = new byte[(int) getSize()]; + final byte[] fileData = new byte[Math.toIntExact(getSize())]; try (InputStream fis = Files.newInputStream(dfos.getFile().toPath())) { IOUtils.readFully(fis, fileData); diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockHttpServletRequest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockHttpServletRequest.java index ec24f5f..723d3d9 100644 --- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockHttpServletRequest.java +++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockHttpServletRequest.java @@ -180,17 +180,7 @@ public class JakartaMockHttpServletRequest implements HttpServletRequest { */ @Override public int getContentLength() { - int iLength; - - if (null == requestInputStream) { - iLength = -1; - } else { - if (requestLength > Integer.MAX_VALUE) { - throw new RuntimeException("Value '" + requestLength + "' is too large to be converted to int"); - } - iLength = (int) requestLength; - } - return iLength; + return requestInputStream != null ? Math.toIntExact(requestLength) : -1; } @Override diff --git a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockServletHttpRequest.java b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockServletHttpRequest.java index c87ef5a..00d0dc7 100644 --- a/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockServletHttpRequest.java +++ b/commons-fileupload2-jakarta/src/test/java/org/apache/commons/fileupload2/jakarta/JakartaMockServletHttpRequest.java @@ -90,15 +90,15 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } - private final InputStream mRequestData; + private final InputStream requestInputStream; - private long length; + private long requestLength; - private final String mStrContentType; + private final String contentType; private int readLimit = -1; - private final Map<String, String> mHeaders = new java.util.HashMap<>(); + private final Map<String, String> headers = new java.util.HashMap<>(); /** * Creates a new instance with the given request data and content type. @@ -111,10 +111,10 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { * Creates a new instance with the given request data and content type. */ public JakartaMockServletHttpRequest(final InputStream requestData, final long requestLength, final String strContentType) { - mRequestData = requestData; - length = requestLength; - mStrContentType = strContentType; - mHeaders.put(AbstractFileUpload.CONTENT_TYPE, strContentType); + this.requestInputStream = requestData; + this.requestLength = requestLength; + this.contentType = strContentType; + this.headers.put(AbstractFileUpload.CONTENT_TYPE, strContentType); } @Override @@ -133,7 +133,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getAttribute(String) + * @see ServletRequest#getAttribute(String) */ @Override public Object getAttribute(final String arg0) { @@ -141,7 +141,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getAttributeNames() + * @see ServletRequest#getAttributeNames() */ @Override public Enumeration<String> getAttributeNames() { @@ -149,7 +149,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getAuthType() + * @see HttpServletRequest#getAuthType() */ @Override public String getAuthType() { @@ -157,7 +157,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getCharacterEncoding() + * @see ServletRequest#getCharacterEncoding() */ @Override public String getCharacterEncoding() { @@ -165,21 +165,11 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getContentLength() + * @see ServletRequest#getContentLength() */ @Override public int getContentLength() { - int iLength; - - if (null == mRequestData) { - iLength = -1; - } else { - if (length > Integer.MAX_VALUE) { - throw new RuntimeException("Value '" + length + "' is too large to be converted to int"); - } - iLength = (int) length; - } - return iLength; + return requestInputStream != null ? Math.toIntExact(requestLength) : -1; } @Override @@ -188,15 +178,15 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getContentType() + * @see ServletRequest#getContentType() */ @Override public String getContentType() { - return mStrContentType; + return contentType; } /** - * @see javax.servlet.http.HttpServletRequest#getContextPath() + * @see HttpServletRequest#getContextPath() */ @Override public String getContextPath() { @@ -204,7 +194,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getCookies() + * @see HttpServletRequest#getCookies() */ @Override public Cookie[] getCookies() { @@ -212,7 +202,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getDateHeader(String) + * @see HttpServletRequest#getDateHeader(String) */ @Override public long getDateHeader(final String arg0) { @@ -225,15 +215,15 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getHeader(String) + * @see HttpServletRequest#getHeader(String) */ @Override public String getHeader(final String headerName) { - return mHeaders.get(headerName); + return headers.get(headerName); } /** - * @see javax.servlet.http.HttpServletRequest#getHeaderNames() + * @see HttpServletRequest#getHeaderNames() */ @Override public Enumeration<String> getHeaderNames() { @@ -242,7 +232,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getHeaders(String) + * @see HttpServletRequest#getHeaders(String) */ @Override public Enumeration<String> getHeaders(final String arg0) { @@ -251,15 +241,15 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getInputStream() + * @see ServletRequest#getInputStream() */ @Override public ServletInputStream getInputStream() throws IOException { - return new MyServletInputStream(mRequestData, readLimit); + return new MyServletInputStream(requestInputStream, readLimit); } /** - * @see javax.servlet.http.HttpServletRequest#getIntHeader(String) + * @see HttpServletRequest#getIntHeader(String) */ @Override public int getIntHeader(final String arg0) { @@ -267,7 +257,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getLocalAddr() + * @see ServletRequest#getLocalAddr() */ @Override @SuppressWarnings("javadoc") // This is a Servlet 2.4 method @@ -276,7 +266,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getLocale() + * @see ServletRequest#getLocale() */ @Override public Locale getLocale() { @@ -284,7 +274,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getLocales() + * @see ServletRequest#getLocales() */ @Override public Enumeration<Locale> getLocales() { @@ -292,7 +282,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getLocalName() + * @see ServletRequest#getLocalName() */ @Override @SuppressWarnings("javadoc") // This is a Servlet 2.4 method @@ -301,7 +291,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getLocalPort() + * @see ServletRequest#getLocalPort() */ @Override @SuppressWarnings("javadoc") // This is a Servlet 2.4 method @@ -310,7 +300,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getMethod() + * @see HttpServletRequest#getMethod() */ @Override public String getMethod() { @@ -318,7 +308,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getParameter(String) + * @see ServletRequest#getParameter(String) */ @Override public String getParameter(final String arg0) { @@ -326,7 +316,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getParameterMap() + * @see ServletRequest#getParameterMap() */ @Override public Map<String, String[]> getParameterMap() { @@ -334,7 +324,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getParameterNames() + * @see ServletRequest#getParameterNames() */ @Override public Enumeration<String> getParameterNames() { @@ -342,7 +332,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getParameterValues(String) + * @see ServletRequest#getParameterValues(String) */ @Override public String[] getParameterValues(final String arg0) { @@ -360,7 +350,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getPathInfo() + * @see HttpServletRequest#getPathInfo() */ @Override public String getPathInfo() { @@ -368,7 +358,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getPathTranslated() + * @see HttpServletRequest#getPathTranslated() */ @Override public String getPathTranslated() { @@ -376,7 +366,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getProtocol() + * @see ServletRequest#getProtocol() */ @Override public String getProtocol() { @@ -388,7 +378,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getQueryString() + * @see HttpServletRequest#getQueryString() */ @Override public String getQueryString() { @@ -396,7 +386,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getReader() + * @see ServletRequest#getReader() */ @Override public BufferedReader getReader() throws IOException { @@ -409,7 +399,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getRemoteAddr() + * @see ServletRequest#getRemoteAddr() */ @Override public String getRemoteAddr() { @@ -417,7 +407,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getRemoteHost() + * @see ServletRequest#getRemoteHost() */ @Override public String getRemoteHost() { @@ -425,7 +415,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getRemotePort() + * @see ServletRequest#getRemotePort() */ @Override @SuppressWarnings("javadoc") // This is a Servlet 2.4 method @@ -434,7 +424,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getRemoteUser() + * @see HttpServletRequest#getRemoteUser() */ @Override public String getRemoteUser() { @@ -442,7 +432,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getRequestDispatcher(String) + * @see ServletRequest#getRequestDispatcher(String) */ @Override public RequestDispatcher getRequestDispatcher(final String arg0) { @@ -450,7 +440,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() + * @see HttpServletRequest#getRequestedSessionId() */ @Override public String getRequestedSessionId() { @@ -462,7 +452,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getRequestURI() + * @see HttpServletRequest#getRequestURI() */ @Override public String getRequestURI() { @@ -470,7 +460,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getRequestURL() + * @see HttpServletRequest#getRequestURL() */ @Override public StringBuffer getRequestURL() { @@ -478,7 +468,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getScheme() + * @see ServletRequest#getScheme() */ @Override public String getScheme() { @@ -486,7 +476,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getServerName() + * @see ServletRequest#getServerName() */ @Override public String getServerName() { @@ -494,7 +484,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#getServerPort() + * @see ServletRequest#getServerPort() */ @Override public int getServerPort() { @@ -511,7 +501,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getServletPath() + * @see HttpServletRequest#getServletPath() */ @Override public String getServletPath() { @@ -519,7 +509,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getSession() + * @see HttpServletRequest#getSession() */ @Override public HttpSession getSession() { @@ -527,7 +517,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getSession(boolean) + * @see HttpServletRequest#getSession(boolean) */ @Override public HttpSession getSession(final boolean arg0) { @@ -535,7 +525,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() + * @see HttpServletRequest#getUserPrincipal() */ @Override public Principal getUserPrincipal() { @@ -553,7 +543,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie() + * @see HttpServletRequest#isRequestedSessionIdFromCookie() */ @Override public boolean isRequestedSessionIdFromCookie() { @@ -561,7 +551,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl() + * @see HttpServletRequest#isRequestedSessionIdFromUrl() * @deprecated */ @Override @@ -571,7 +561,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL() + * @see HttpServletRequest#isRequestedSessionIdFromURL() */ @Override public boolean isRequestedSessionIdFromURL() { @@ -579,7 +569,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() + * @see HttpServletRequest#isRequestedSessionIdValid() */ @Override public boolean isRequestedSessionIdValid() { @@ -587,7 +577,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#isSecure() + * @see ServletRequest#isSecure() */ @Override public boolean isSecure() { @@ -595,7 +585,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.http.HttpServletRequest#isUserInRole(String) + * @see HttpServletRequest#isUserInRole(String) */ @Override public boolean isUserInRole(final String arg0) { @@ -613,21 +603,21 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { } /** - * @see javax.servlet.ServletRequest#removeAttribute(String) + * @see ServletRequest#removeAttribute(String) */ @Override public void removeAttribute(final String arg0) { } /** - * @see javax.servlet.ServletRequest#setAttribute(String, Object) + * @see ServletRequest#setAttribute(String, Object) */ @Override public void setAttribute(final String arg0, final Object arg1) { } /** - * @see javax.servlet.ServletRequest#setCharacterEncoding(String) + * @see ServletRequest#setCharacterEncoding(String) */ @Override public void setCharacterEncoding(final String arg0) throws UnsupportedEncodingException { @@ -637,7 +627,7 @@ public class JakartaMockServletHttpRequest implements HttpServletRequest { * For testing attack scenarios in SizesTest. */ public void setContentLength(final long length) { - this.length = length; + this.requestLength = length; } /** diff --git a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxMockHttpServletRequest.java b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxMockHttpServletRequest.java index 53255a9..bfade27 100644 --- a/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxMockHttpServletRequest.java +++ b/commons-fileupload2-javax/src/test/java/org/apache/commons/fileupload2/javax/JavaxMockHttpServletRequest.java @@ -134,17 +134,7 @@ public class JavaxMockHttpServletRequest implements HttpServletRequest { */ @Override public int getContentLength() { - int iLength; - - if (null == requestInputStream) { - iLength = -1; - } else { - if (requestLength > Integer.MAX_VALUE) { - throw new RuntimeException("Value '" + requestLength + "' is too large to be converted to int"); - } - iLength = (int) requestLength; - } - return iLength; + return requestInputStream != null ? Math.toIntExact(requestLength) : -1; } /**