You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/06/03 14:14:18 UTC

svn commit: r1599500 - in /tomcat/trunk: java/org/apache/coyote/http11/AbstractHttp11Processor.java test/org/apache/catalina/startup/SimpleHttpClient.java test/org/apache/coyote/http11/TestAbstractHttp11Processor.java

Author: markt
Date: Tue Jun  3 12:14:17 2014
New Revision: 1599500

URL: http://svn.apache.org/r1599500
Log:
As per RFC2616, an unknown expect header should result in a 417 response.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
    tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
    tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java

Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1599500&r1=1599499&r2=1599500&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Tue Jun  3 12:14:17 2014
@@ -1250,10 +1250,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/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=1599500&r1=1599499&r2=1599500&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java (original)
+++ tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java Tue Jun  3 12:14:17 2014
@@ -54,6 +54,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";
@@ -421,6 +422,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/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java?rev=1599500&r1=1599499&r2=1599500&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java Tue Jun  3 12:14:17 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: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org