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: [email protected]
For additional commands, e-mail: [email protected]