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