You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2011/11/25 15:50:43 UTC
svn commit: r1206200 - in /tomcat/trunk:
java/org/apache/catalina/connector/Request.java
test/org/apache/catalina/connector/TestRequest.java
test/org/apache/catalina/startup/SimpleHttpClient.java
Author: kkolinko
Date: Fri Nov 25 14:50:42 2011
New Revision: 1206200
URL: http://svn.apache.org/viewvc?rev=1206200&view=rev
Log:
Do not throw IllegalArgumentException from within parseParameters when chunked POST request is too large,
but treat it like an IO error.
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Request.java
tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1206200&r1=1206199&r2=1206200&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Fri Nov 25 14:50:42 2011
@@ -2867,7 +2867,7 @@ public class Request
try {
formData = readChunkedPostBody();
} catch (IOException e) {
- // Client disconnect
+ // Client disconnect or chunkedPostTooLarge error
if (context.getLogger().isDebugEnabled()) {
context.getLogger().debug(
sm.getString("coyoteRequest.parseParameters"), e);
@@ -2922,7 +2922,7 @@ public class Request
(body.getLength() + len) > connector.getMaxPostSize()) {
// Too much data
checkSwallowInput();
- throw new IllegalArgumentException(
+ throw new IOException(
sm.getString("coyoteRequest.chunkedPostTooLarge"));
}
if (len > 0) {
Modified: tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java?rev=1206200&r1=1206199&r2=1206200&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java (original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java Fri Nov 25 14:50:42 2011
@@ -38,7 +38,10 @@ import org.junit.Test;
import org.apache.catalina.Context;
import org.apache.catalina.authenticator.BasicAuthenticator;
+import org.apache.catalina.deploy.FilterDef;
+import org.apache.catalina.deploy.FilterMap;
import org.apache.catalina.deploy.LoginConfig;
+import org.apache.catalina.filters.FailedRequestFilter;
import org.apache.catalina.startup.SimpleHttpClient;
import org.apache.catalina.startup.TestTomcat.MapRealm;
import org.apache.catalina.startup.Tomcat;
@@ -58,7 +61,7 @@ public class TestRequest extends TomcatB
*/
@Test
public void testBug37794() {
- Bug37794Client client = new Bug37794Client();
+ Bug37794Client client = new Bug37794Client(true);
client.setPort(getPort());
// Edge cases around zero
@@ -71,14 +74,14 @@ public class TestRequest extends TomcatB
assertTrue(client.isResponseBodyOK());
client.reset();
client.doRequest(1, false); // 1 byte - too small should fail
- assertTrue(client.isResponse500());
+ assertTrue(client.isResponse400());
client.reset();
// Edge cases around actual content length
client.reset();
client.doRequest(6, false); // Too small should fail
- assertTrue(client.isResponse500());
+ assertTrue(client.isResponse400());
client.reset();
client.doRequest(7, false); // Just enough should pass
assertTrue(client.isResponse200());
@@ -101,6 +104,23 @@ public class TestRequest extends TomcatB
assertTrue(client.isResponseBodyOK());
}
+ /**
+ * Additional test for failed requests handling when no FailedRequestFilter
+ * is defined.
+ */
+ @Test
+ public void testBug37794withoutFilter() {
+ Bug37794Client client = new Bug37794Client(false);
+ client.setPort(getPort());
+
+ // Edge cases around actual content length
+ client.reset();
+ client.doRequest(6, false); // Too small should fail
+ // Response code will be OK, but parameters list will be empty
+ assertTrue(client.isResponse200());
+ assertEquals("", client.getResponseBody());
+ }
+
private static class Bug37794Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@@ -130,8 +150,14 @@ public class TestRequest extends TomcatB
*/
private class Bug37794Client extends SimpleHttpClient {
+ private final boolean createFilter;
+
private boolean init;
+ public Bug37794Client(boolean createFilter) {
+ this.createFilter = createFilter;
+ }
+
private synchronized void init() throws Exception {
if (init) return;
@@ -139,6 +165,19 @@ public class TestRequest extends TomcatB
Context root = tomcat.addContext("", TEMP_DIR);
Tomcat.addServlet(root, "Bug37794", new Bug37794Servlet());
root.addServletMapping("/test", "Bug37794");
+
+ if (createFilter) {
+ FilterDef failedRequestFilter = new FilterDef();
+ failedRequestFilter.setFilterName("failedRequestFilter");
+ failedRequestFilter.setFilterClass(
+ FailedRequestFilter.class.getName());
+ FilterMap failedRequestFilterMap = new FilterMap();
+ failedRequestFilterMap.setFilterName("failedRequestFilter");
+ failedRequestFilterMap.addURLPattern("/*");
+ root.addFilterDef(failedRequestFilter);
+ root.addFilterMap(failedRequestFilterMap);
+ }
+
tomcat.start();
init = true;
Modified: tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=1206200&r1=1206199&r2=1206200&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java (original)
+++ tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java Fri Nov 25 14:50:42 2011
@@ -46,6 +46,7 @@ public abstract class SimpleHttpClient {
public static final String INFO_100 = "HTTP/1.1 100";
public static final String OK_200 = "HTTP/1.1 200";
public static final String REDIRECT_302 = "HTTP/1.1 302";
+ public static final String FAIL_400 = "HTTP/1.1 400";
public static final String FAIL_404 = "HTTP/1.1 404";
public static final String FAIL_413 = "HTTP/1.1 413";
public static final String FAIL_50X = "HTTP/1.1 50";
@@ -244,6 +245,10 @@ public abstract class SimpleHttpClient {
return getResponseLine().startsWith(REDIRECT_302);
}
+ public boolean isResponse400() {
+ return getResponseLine().startsWith(FAIL_400);
+ }
+
public boolean isResponse404() {
return getResponseLine().startsWith(FAIL_404);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org