Author: violetagg
Date: Tue Aug  1 07:08:36 2017
New Revision: 1803616

URL: http://svn.apache.org/viewvc?rev=1803616&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=61086
Ensure to explicitly signal an empty request body for HTTP 205 responses.
Additional fix to r1795278. Based on a patch provided by Alexandr Saperov.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
    tomcat/trunk/test/org/apache/coyote/http11/TestHttp11Processor.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1803616&r1=1803615&r2=1803616&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Aug  1 
07:08:36 2017
@@ -851,6 +851,8 @@ public class Http11Processor extends Abs
                 // RFC 7231 requires the server to explicitly signal an empty
                 // response in this case
                 response.setContentLength(0);
+            } else {
+                response.setContentLength(-1);
             }
         }
 
@@ -882,9 +884,6 @@ public class Http11Processor extends Abs
         }
 
         MimeHeaders headers = response.getMimeHeaders();
-        if (!entityBody) {
-            response.setContentLength(-1);
-        }
         // A SC_NO_CONTENT response may include entity headers
         if (entityBody || statusCode == HttpServletResponse.SC_NO_CONTENT) {
             String contentType = response.getContentType();

Modified: tomcat/trunk/test/org/apache/coyote/http11/TestHttp11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/TestHttp11Processor.java?rev=1803616&r1=1803615&r2=1803616&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/TestHttp11Processor.java 
(original)
+++ tomcat/trunk/test/org/apache/coyote/http11/TestHttp11Processor.java Tue Aug 
 1 07:08:36 2017
@@ -47,6 +47,7 @@ import javax.servlet.http.HttpServletRes
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Assert;
@@ -972,4 +973,38 @@ public class TestHttp11Processor extends
             }
         }
     }
+
+    @Test
+    public void testBug61086() throws Exception {
+        Tomcat tomcat = getTomcatInstance();
+
+        // No file system docBase required
+        Context ctx = tomcat.addContext("", null);
+
+        Bug61086Servlet servlet = new Bug61086Servlet();
+        Tomcat.addServlet(ctx, "Test", servlet);
+        ctx.addServletMappingDecoded("/test", "Test");
+
+        tomcat.start();
+
+        ByteChunk responseBody = new ByteChunk();
+        Map<String,List<String>> responseHeaders = new HashMap<>();
+        int rc = getUrl("http://localhost:"; + getPort() + "/test", 
responseBody, responseHeaders);
+
+        assertEquals(HttpServletResponse.SC_RESET_CONTENT, rc);
+        assertNotNull(responseHeaders.get("Content-Length"));
+        assertTrue("0".equals(responseHeaders.get("Content-Length").get(0)));
+        assertTrue(responseBody.getLength() == 0);
+    }
+
+    private static final class Bug61086Servlet extends HttpServlet {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+                throws ServletException, IOException {
+            resp.setStatus(205);
+        }
+    }
 }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1803616&r1=1803615&r2=1803616&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Aug  1 07:08:36 2017
@@ -70,6 +70,11 @@
   </subsection>
   <subsection name="Coyote">
     <changelog>
+      <fix>
+        <bug>61086</bug>: Ensure to explicitly signal an empty request body for
+        HTTP 205 responses. Additional fix to r1795278. Based on a patch
+        provided by Alexandr Saperov. (violetagg)
+      </fix>
       <update>
         <bug>61345</bug>: Add a server listener that can be used to do system
         property replacement from the property source configured in the



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to