Author: markt
Date: Sat Dec 24 17:52:22 2016
New Revision: 1775985

URL: http://svn.apache.org/viewvc?rev=1775985&view=rev
Log:
Fix HTTP/2 compression error.
Once a new size has been agreed for the dynamic hapck table, the next header 
block must begin with a dynamic table update.

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java
    tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java
    tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
    tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
    tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java

Modified: tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java Sat 
Dec 24 17:52:22 2016
@@ -38,7 +38,7 @@ abstract class ConnectionSettingsBase<T
     static final int MAX_HEADER_TABLE_SIZE = 1 << 16;
 
     // Defaults
-    static final int DEFAULT_HEADER_TABLE_SIZE = 4096;
+    static final int DEFAULT_HEADER_TABLE_SIZE = Hpack.DEFAULT_TABLE_SIZE;
     static final boolean DEFAULT_ENABLE_PUSH = true;
     static final long DEFAULT_MAX_CONCURRENT_STREAMS = UNLIMITED;
     static final int DEFAULT_INITIAL_WINDOW_SIZE = (1 << 16) - 1;

Modified: tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java Sat Dec 24 
17:52:22 2016
@@ -95,7 +95,7 @@ class HpackEncoder {
     /**
      * The maximum table size
      */
-    private int maxTableSize;
+    private int maxTableSize = Hpack.DEFAULT_TABLE_SIZE;
 
     /**
      * The current table size
@@ -104,8 +104,7 @@ class HpackEncoder {
 
     private final HpackHeaderFunction hpackHeaderFunction;
 
-    HpackEncoder(int maxTableSize) {
-        this.maxTableSize = maxTableSize;
+    HpackEncoder() {
         this.hpackHeaderFunction = DEFAULT_HEADER_FUNCTION;
     }
 

Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Sat Dec 
24 17:52:22 2016
@@ -635,8 +635,10 @@ class Http2UpgradeHandler extends Abstra
 
     private HpackEncoder getHpackEncoder() {
         if (hpackEncoder == null) {
-            hpackEncoder = new 
HpackEncoder(remoteSettings.getHeaderTableSize());
+            hpackEncoder = new HpackEncoder();
         }
+        // Ensure latest agreed table size is used
+        hpackEncoder.setMaxTableSize(remoteSettings.getHeaderTableSize());
         return hpackEncoder;
     }
 

Modified: tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java Sat Dec 24 
17:52:22 2016
@@ -513,7 +513,7 @@ public abstract class Http2TestBase exte
         input = new TestInput(is);
         output = new TestOutput();
         parser = new Http2Parser("-1", input, output);
-        hpackEncoder = new 
HpackEncoder(ConnectionSettingsBase.DEFAULT_HEADER_TABLE_SIZE);
+        hpackEncoder = new HpackEncoder();
     }
 
 

Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java Sat Dec 24 
17:52:22 2016
@@ -32,7 +32,7 @@ public class TestHpack {
         headers.setValue(":status").setString("200");
         headers.setValue("header2").setString("value2");
         ByteBuffer output = ByteBuffer.allocate(512);
-        HpackEncoder encoder = new HpackEncoder(1024);
+        HpackEncoder encoder = new HpackEncoder();
         encoder.encode(headers, output);
         output.flip();
         // Size is supposed to be 33 without huffman, or 27 with it
@@ -52,7 +52,7 @@ public class TestHpack {
         headers.setValue(":status").setString("200");
         headers.setValue("header2").setString("value2");
         ByteBuffer output = ByteBuffer.allocate(512);
-        HpackEncoder encoder = new HpackEncoder(1024);
+        HpackEncoder encoder = new HpackEncoder();
         encoder.encode(headers, output);
         output.flip();
         MimeHeaders headers2 = new MimeHeaders();
@@ -111,7 +111,7 @@ public class TestHpack {
         MimeHeaders headers = new MimeHeaders();
         headers.setValue(headerName).setString(headerValue);
         ByteBuffer output = ByteBuffer.allocate(512);
-        HpackEncoder encoder = new HpackEncoder(1024);
+        HpackEncoder encoder = new HpackEncoder();
         encoder.encode(headers, output);
         output.flip();
         MimeHeaders headers2 = new MimeHeaders();



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

Reply via email to