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