You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/10/04 18:08:36 UTC

svn commit: r1394127 - in /tomcat/tc6.0.x/trunk: STATUS.txt java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java webapps/docs/changelog.xml

Author: markt
Date: Thu Oct  4 16:08:35 2012
New Revision: 1394127

URL: http://svn.apache.org/viewvc?rev=1394127&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53725
Fix possible corruption of GZIP'd output.

Modified:
    tomcat/tc6.0.x/trunk/STATUS.txt
    tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java
    tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=1394127&r1=1394126&r2=1394127&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Thu Oct  4 16:08:35 2012
@@ -89,13 +89,6 @@ PATCHES PROPOSED TO BACKPORT:
   +1: schultz, kkolinko, jfclere
   -1:
 
-* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53725
-  Fix possible corruption of GZIP'd output.
-  http://svn.apache.org/viewvc?rev=1378403&view=rev
-  http://svn.apache.org/viewvc?rev=1378408&view=rev
-  +1: kkolinko, jfclere, markt
-  -1:
-
 * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53793
   Change links on the list of applications in the Manager to point to
   '/appname/' instead of '/appname'.

Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java?rev=1394127&r1=1394126&r2=1394127&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/filters/FlushableGZIPOutputStream.java Thu Oct  4 16:08:35 2012
@@ -42,6 +42,12 @@ public class FlushableGZIPOutputStream e
     private byte[] lastByte = new byte[1];
     private boolean hasLastByte = false;
 
+    /**
+     * Flag that compression has to be re-enabled before the next write
+     * operation.
+     */
+    private boolean flagReenableCompression = false;
+
     @Override
     public void write(byte[] bytes) throws IOException {
         write(bytes, 0, bytes.length);
@@ -53,6 +59,7 @@ public class FlushableGZIPOutputStream e
         if (length > 0) {
             flushLastByte();
             if (length > 1) {
+                reenableCompression();
                 super.write(bytes, offset, length - 1);
             }
             rememberLastByte(bytes[offset + length - 1]);
@@ -89,6 +96,13 @@ public class FlushableGZIPOutputStream e
         super.close();
     }
 
+    private void reenableCompression() {
+        if (flagReenableCompression && !def.finished()) {
+            flagReenableCompression = false;
+            def.setLevel(Deflater.DEFAULT_COMPRESSION);
+        }
+    }
+
     private void rememberLastByte(byte b) {
         lastByte[0] = b;
         hasLastByte = true;
@@ -96,6 +110,7 @@ public class FlushableGZIPOutputStream e
 
     private void flushLastByte() throws IOException {
         if (hasLastByte) {
+            reenableCompression();
             // Clear the flag first, because write() may fail
             hasLastByte = false;
             super.write(lastByte, 0, 1);
@@ -118,7 +133,7 @@ public class FlushableGZIPOutputStream e
             if (!def.finished()) {
                 def.setLevel(Deflater.NO_COMPRESSION);
                 flushLastByte();
-                def.setLevel(Deflater.DEFAULT_COMPRESSION);
+                flagReenableCompression = true;
             }
         }
         out.flush();
@@ -139,5 +154,4 @@ public class FlushableGZIPOutputStream e
             }
         } while (len != 0);
     }
-
 }

Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1394127&r1=1394126&r2=1394127&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Thu Oct  4 16:08:35 2012
@@ -254,6 +254,9 @@
         <code>maxHeaderCount</code> attribute on Connector MBean via JMX.
         (kkolinko)
       </fix>
+      <fix>
+        <bug>53725</bug>: Fix possible corruption of GZIP'd output. (kkolinko)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org