Author: markt
Date: Fri Jun 13 11:26:36 2014
New Revision: 1602381
URL: http://svn.apache.org/r1602381
Log:
As per RFC2616, an unknown expect header should result in a 417 response.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1599500
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1602381&r1=1602380&r2=1602381&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
Fri Jun 13 11:26:36 2014
@@ -1242,10 +1242,14 @@ public abstract class AbstractHttp11Proc
if (http11) {
expectMB = headers.getValue("expect");
}
- if ((expectMB != null)
- && (expectMB.indexOfIgnoreCase("100-continue", 0) != -1)) {
- getInputBuffer().setSwallowInput(false);
- expectation = true;
+ if (expectMB != null) {
+ if (expectMB.indexOfIgnoreCase("100-continue", 0) != -1) {
+ getInputBuffer().setSwallowInput(false);
+ expectation = true;
+ } else {
+ error = true;
+ response.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED);
+ }
}
// Check user-agent header
Modified:
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=1602381&r1=1602380&r2=1602381&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
Fri Jun 13 11:26:36 2014
@@ -53,6 +53,7 @@ public abstract class SimpleHttpClient {
public static final String FAIL_404 = "HTTP/1.1 404";
public static final String TIMEOUT_408 = "HTTP/1.1 408";
public static final String FAIL_413 = "HTTP/1.1 413";
+ public static final String FAIL_417 = "HTTP/1.1 417";
public static final String FAIL_50X = "HTTP/1.1 50";
public static final String FAIL_500 = "HTTP/1.1 500";
public static final String FAIL_501 = "HTTP/1.1 501";
@@ -416,6 +417,10 @@ public abstract class SimpleHttpClient {
return getResponseLine().startsWith(FAIL_413);
}
+ public boolean isResponse417() {
+ return getResponseLine().startsWith(FAIL_417);
+ }
+
public boolean isResponse50x() {
return getResponseLine().startsWith(FAIL_50X);
}
Modified:
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java?rev=1602381&r1=1602380&r2=1602381&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
(original)
+++
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
Fri Jun 13 11:26:36 2014
@@ -53,6 +53,31 @@ import org.apache.tomcat.util.buf.ByteCh
public class TestAbstractHttp11Processor extends TomcatBaseTest {
@Test
+ public void testWithUnknownExpectation() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ // Use the normal Tomcat ROOT context
+ File root = new File("test/webapp");
+ tomcat.addWebapp("", root.getAbsolutePath());
+
+ tomcat.start();
+
+ String request =
+ "POST /echo-params.jsp HTTP/1.1" + SimpleHttpClient.CRLF +
+ "Host: any" + SimpleHttpClient.CRLF +
+ "Expect: unknoen" + SimpleHttpClient.CRLF +
+ SimpleHttpClient.CRLF;
+
+ Client client = new Client(tomcat.getConnector().getLocalPort());
+ client.setRequest(new String[] {request});
+
+ client.connect();
+ client.processRequest();
+ assertTrue(client.isResponse417());
+ }
+
+
+ @Test
public void testWithTEVoid() throws Exception {
Tomcat tomcat = getTomcatInstance();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]