Author: markt Date: Wed Dec 12 23:25:39 2018 New Revision: 1848810 URL: http://svn.apache.org/viewvc?rev=1848810&view=rev Log: Ensure that the HEAD response is consistent with the GET response when HttpServlet is relied upon to generate the HEAD response and the GET response uses chunking.
Modified: tomcat/trunk/java/javax/servlet/http/HttpServlet.java tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/javax/servlet/http/HttpServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/HttpServlet.java?rev=1848810&r1=1848809&r2=1848810&view=diff ============================================================================== --- tomcat/trunk/java/javax/servlet/http/HttpServlet.java (original) +++ tomcat/trunk/java/javax/servlet/http/HttpServlet.java Wed Dec 12 23:25:39 2018 @@ -758,7 +758,7 @@ class NoBodyResponse extends HttpServlet // file private NoBodyResponse(HttpServletResponse r) { super(r); - noBody = new NoBodyOutputStream(); + noBody = new NoBodyOutputStream(this); } // file private @@ -847,11 +847,13 @@ class NoBodyOutputStream extends Servlet private static final ResourceBundle lStrings = ResourceBundle.getBundle(LSTRING_FILE); + private final HttpServletResponse response; + private boolean flushed = false; private int contentLength = 0; // file private - NoBodyOutputStream() { - // NOOP + NoBodyOutputStream(HttpServletResponse response) { + this.response = response; } // file private @@ -860,8 +862,9 @@ class NoBodyOutputStream extends Servlet } @Override - public void write(int b) { + public void write(int b) throws IOException { contentLength++; + checkCommit(); } @Override @@ -882,6 +885,7 @@ class NoBodyOutputStream extends Servlet } contentLength += len; + checkCommit(); } @Override @@ -894,4 +898,11 @@ class NoBodyOutputStream extends Servlet public void setWriteListener(javax.servlet.WriteListener listener) { // TODO SERVLET 3.1 } + + private void checkCommit() throws IOException { + if (!flushed && contentLength > response.getBufferSize()) { + response.flushBuffer(); + flushed = true; + } + } } Modified: tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java?rev=1848810&r1=1848809&r2=1848810&view=diff ============================================================================== --- tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java (original) +++ tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java Wed Dec 12 23:25:39 2018 @@ -143,7 +143,7 @@ public class TestHttpServlet extends Tom if ("date".equalsIgnoreCase(headerName)) { continue; } - Assert.assertTrue(headHeaders.containsKey(headerName)); + Assert.assertTrue(headerName, headHeaders.containsKey(headerName)); List<String> getValues = getHeader.getValue(); List<String> headValues = headHeaders.get(headerName); Assert.assertEquals(getValues.size(), headValues.size()); @@ -198,8 +198,8 @@ public class TestHttpServlet extends Tom resp.setContentType("text/plain"); resp.setCharacterEncoding("UTF-8"); PrintWriter pw = resp.getWriter(); - // Force chunking - resp.flushBuffer(); + // Trigger chunking + pw.write(new char[8192 * 16]); pw.println("Data"); } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1848810&r1=1848809&r2=1848810&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Wed Dec 12 23:25:39 2018 @@ -56,6 +56,11 @@ fragments with duplicate names and is configured to use relative ordering of fragments. (markt) </fix> + <fix> + Ensure that the HEAD response is consistent with the GET response when + <code>HttpServlet</code> is relied upon to generate the HEAD response + and the GET response uses chunking. (markt) + </fix> </changelog> </subsection> </section> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org