Author: markt
Date: Tue Aug 28 23:57:35 2012
New Revision: 1378389
URL: http://svn.apache.org/viewvc?rev=1378389&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53725
Flushing the single byte needs special handling to avoid corruption in some
edge cases. There may still be other edge cases where this fails.
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java?rev=1378389&r1=1378388&r2=1378389&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java
Tue Aug 28 23:57:35 2012
@@ -41,6 +41,7 @@ public class FlushableGZIPOutputStream e
*/
private byte[] lastByte = new byte[1];
private boolean hasLastByte = false;
+ private boolean flushingLastByte = false;
@Override
public void write(byte[] bytes) throws IOException {
@@ -98,7 +99,9 @@ public class FlushableGZIPOutputStream e
if (hasLastByte) {
// Clear the flag first, because write() may fail
hasLastByte = false;
+ flushingLastByte = true;
super.write(lastByte, 0, 1);
+ flushingLastByte = false;
}
}
@@ -137,6 +140,6 @@ public class FlushableGZIPOutputStream e
if (len > 0) {
out.write(buf, 0, len);
}
- } while (len > 0 || !def.needsInput());
+ } while (len !=0 && !flushingLastByte || !def.needsInput());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]