Author: markt
Date: Sun Feb 5 21:12:42 2012
New Revision: 1240821
URL: http://svn.apache.org/viewvc?rev=1240821&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52577
Only reset the encoder information when the 'has getWriter()' been
called flag is reset.
Includes a simple test case
Modified:
tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
tomcat/trunk/java/org/apache/catalina/connector/Response.java
tomcat/trunk/test/org/apache/catalina/connector/TestOutputBuffer.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java?rev=1240821&r1=1240820&r2=1240821&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/OutputBuffer.java Sun Feb
5 21:12:42 2012
@@ -583,6 +583,10 @@ public class OutputBuffer extends Writer
public void reset() {
+ reset(false);
+ }
+
+ public void reset(boolean resetWriterStreamFlags) {
// If a Writer was being used, there may be bytes in the converter
if (gotEnc && conv != null) {
conv.recycle();
@@ -590,8 +594,10 @@ public class OutputBuffer extends Writer
bb.recycle();
bytesWritten = 0;
charsWritten = 0;
- gotEnc = false;
- enc = null;
+ if (resetWriterStreamFlags) {
+ gotEnc = false;
+ enc = null;
+ }
initial = true;
}
Modified: tomcat/trunk/java/org/apache/catalina/connector/Response.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Response.java?rev=1240821&r1=1240820&r2=1240821&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Response.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Response.java Sun Feb 5
21:12:42 2012
@@ -624,7 +624,7 @@ public class Response
(sm.getString("coyoteResponse.resetBuffer.ise"));
}
- outputBuffer.reset();
+ outputBuffer.reset(resetWriterStreamFlags);
if(resetWriterStreamFlags) {
usingOutputStream = false;
Modified: tomcat/trunk/test/org/apache/catalina/connector/TestOutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestOutputBuffer.java?rev=1240821&r1=1240820&r2=1240821&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestOutputBuffer.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestOutputBuffer.java Sun
Feb 5 21:12:42 2012
@@ -70,6 +70,25 @@ public class TestOutputBuffer extends To
}
}
+ @Test
+ public void testBug52577() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ Context root = tomcat.addContext("", TEMP_DIR);
+
+ Bug52577Servlet bug52577 = new Bug52577Servlet();
+ Tomcat.addServlet(root, "bug52577", bug52577);
+ root.addServletMapping("/", "bug52577");
+
+ tomcat.start();
+
+ ByteChunk bc = new ByteChunk();
+
+ int rc = getUrl("http://localhost:" + getPort() + "/", bc, null, null);
+ assertEquals(HttpServletResponse.SC_OK, rc);
+ assertEquals("OK", bc.toString());
+ }
+
private static class WritingServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@@ -117,4 +136,18 @@ public class TestOutputBuffer extends To
", Time: " + lastRunNano + "ns");
}
}
+
+ private static class Bug52577Servlet extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+ throws ServletException, IOException {
+ Writer w = resp.getWriter();
+ w.write("OK");
+ resp.resetBuffer();
+ w.write("OK");
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]