This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new e6ad02fb10 Simplify reading of request body for x-www-form-urlencoded processing e6ad02fb10 is described below commit e6ad02fb10506618f7e03c472105462b5c2f1d61 Author: Mark Thomas <ma...@apache.org> AuthorDate: Fri Jun 23 17:44:36 2023 +0100 Simplify reading of request body for x-www-form-urlencoded processing An incomplete body is the same as a client disconnect before the request body has been read as that is the only way a client can provide an incomplete body. --- java/org/apache/catalina/connector/Request.java | 31 ++++++++++++++++++---- .../catalina/filters/FailedRequestFilter.java | 1 + java/org/apache/tomcat/util/http/Parameters.java | 6 +++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/java/org/apache/catalina/connector/Request.java b/java/org/apache/catalina/connector/Request.java index 312b3f4e81..88de9be19a 100644 --- a/java/org/apache/catalina/connector/Request.java +++ b/java/org/apache/catalina/connector/Request.java @@ -17,6 +17,7 @@ package org.apache.catalina.connector; import java.io.BufferedReader; +import java.io.EOFException; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -3115,10 +3116,7 @@ public class Request implements HttpServletRequest { formData = new byte[len]; } try { - if (readPostBody(formData, len) != len) { - parameters.setParseFailedReason(FailReason.REQUEST_BODY_INCOMPLETE); - return; - } + readPostBodyFully(formData, len); } catch (IOException e) { // Client disconnect Context context = getContext(); @@ -3165,7 +3163,7 @@ public class Request implements HttpServletRequest { /** - * Read post body in an array. + * Read post body into an array. * * @param body The bytes array in which the body will be read * @param len The body length @@ -3173,7 +3171,10 @@ public class Request implements HttpServletRequest { * @return the bytes count that has been read * * @throws IOException if an IO exception occurred + * + * @deprecated Unused. Will be removed in Tomcat 11.0.x onwards. Use {@link #readPostBodyFully(byte[], int)} */ + @Deprecated protected int readPostBody(byte[] body, int len) throws IOException { int offset = 0; @@ -3189,6 +3190,26 @@ public class Request implements HttpServletRequest { } + /** + * Read post body into an array. + * + * @param body The bytes array in which the body will be read + * @param len The body length + * + * @throws IOException if an IO exception occurred or EOF is reached before the body has been fully read + */ + protected void readPostBodyFully(byte[] body, int len) throws IOException { + int offset = 0; + do { + int inputLen = getStream().read(body, offset, len - offset); + if (inputLen <= 0) { + throw new EOFException(); + } + offset += inputLen; + } while ((len - offset) > 0); + } + + /** * Read chunked post body. * diff --git a/java/org/apache/catalina/filters/FailedRequestFilter.java b/java/org/apache/catalina/filters/FailedRequestFilter.java index 3e6368faf7..389575c7ce 100644 --- a/java/org/apache/catalina/filters/FailedRequestFilter.java +++ b/java/org/apache/catalina/filters/FailedRequestFilter.java @@ -49,6 +49,7 @@ public class FailedRequestFilter extends FilterBase { return log; } + @SuppressWarnings("deprecation") @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/java/org/apache/tomcat/util/http/Parameters.java b/java/org/apache/tomcat/util/http/Parameters.java index e56793b3de..29a6bc0f91 100644 --- a/java/org/apache/tomcat/util/http/Parameters.java +++ b/java/org/apache/tomcat/util/http/Parameters.java @@ -503,6 +503,12 @@ public final class Parameters { IO_ERROR, NO_NAME, POST_TOO_LARGE, + /** + * Same as {@link #CLIENT_DISCONNECT}. + * + * @deprecated Unused. Will be removed in Tomcat 11.0.x onwards + */ + @Deprecated REQUEST_BODY_INCOMPLETE, TOO_MANY_PARAMETERS, UNKNOWN, --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org