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 2015/06/23 21:28:15 UTC
svn commit: r1687119 - in /tomcat/trunk:
java/org/apache/coyote/http2/Http2Parser.java
java/org/apache/coyote/http2/LocalStrings.properties
test/org/apache/coyote/http2/TestHttp2Section_6_2.java
Author: markt
Date: Tue Jun 23 19:28:15 2015
New Revision: 1687119
URL: http://svn.apache.org/r1687119
Log:
Add some more header frame + padding tests
Fix a bug in the parser (it didn't catch padding >= payload)
Modified:
tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_6_2.java
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java?rev=1687119&r1=1687118&r2=1687119&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java Tue Jun 23 19:28:15 2015
@@ -144,7 +144,7 @@ class Http2Parser {
if (padLength >= payloadSize) {
throw new ConnectionException(
- sm.getString("http2Parser.processFrameData.tooMuchPadding", connectionId,
+ sm.getString("http2Parser.processFrame.tooMuchPadding", connectionId,
Integer.toString(streamId), Integer.toString(padLength),
Integer.toString(payloadSize)), Http2Error.PROTOCOL_ERROR);
}
@@ -216,6 +216,12 @@ class Http2Parser {
int optionalPos = 0;
if (padding) {
padLength = ByteUtil.getOneByte(optional, optionalPos++);
+ if (padLength >= payloadSize) {
+ throw new ConnectionException(
+ sm.getString("http2Parser.processFrame.tooMuchPadding", connectionId,
+ Integer.toString(streamId), Integer.toString(padLength),
+ Integer.toString(payloadSize)), Http2Error.PROTOCOL_ERROR);
+ }
}
if (priority) {
boolean exclusive = ByteUtil.isBit7Set(optional[optionalPos]);
Modified: tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties?rev=1687119&r1=1687118&r2=1687119&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Tue Jun 23 19:28:15 2015
@@ -43,10 +43,10 @@ http2Parser.payloadTooBig=The payload is
http2Parser.preface.invalid=Invalid connection preface [{0}] presented
http2Parser.preface.io=Unable to read connection preface
http2Parser.processFrame=Connection [{0}], Stream [{1}], Frame type [{2}], Flags [{3}], Payload size [{4}]
+http2Parser.processFrame.tooMuchPadding=Connection [{0}], Stream [{1}], The padding length [{2}] was too big for the payload [{3}]
http2Parser.processFrame.unexpectedType=Expected frame type [{0}] but received frame type [{1}]
http2Parser.processFrameContinuation.notExpected=Connection [{0}], Continuation frame received for stream [{1}] when no headers were in progress
http2Parser.processFrameData.lengths=Connection [{0}], Stream [{1}], Data length, [{2}], Padding length [{3}]
-http2Parser.processFrameData.tooMuchPadding=Connection [{0}], Stream [{1}], The padding length [{2}] was too big for the payload [{3}]
http2Parser.processFrameGoaway.payloadTooSmall=Connection [{0}]: Goaway payload size was [{1}] which is less than the minimum 8
http2Parser.processFrameHeaders.decodingFailed=There was an error during the HPACK decoding of HTTP headers
http2Parser.processFrameHeaders.decodingDataLeft=Data left over after HPACK decoding - it should have been consumed
Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_6_2.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_6_2.java?rev=1687119&r1=1687118&r2=1687119&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_6_2.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_6_2.java Tue Jun 23 19:28:15 2015
@@ -58,12 +58,62 @@ public class TestHttp2Section_6_2 extend
sendSimpleGetRequest(3, padding);
readSimpleGetResponse();
Assert.assertEquals(getSimpleResponseTrace(3), output.getTrace());
- output.clearTrace();
}
- // with non-zero padding
- // too much padding
+ @Test
+ public void testHeaderFrameWithNonZeroPadding() throws Exception {
+ http2Connect();
- // zero length padding
+ byte[] padding= new byte[8];
+ padding[4] = 1;
+
+ sendSimpleGetRequest(3, padding);
+
+ // Goaway
+ parser.readFrame(true);
+
+ Assert.assertTrue(output.getTrace(), output.getTrace().startsWith(
+ "0-Goaway-[1]-[" + Http2Error.PROTOCOL_ERROR.getCode() + "]-["));
+ }
+
+
+ @Test
+ public void testHeaderFrameTooMuchPadding() throws Exception {
+ http2Connect();
+
+ byte[] headerFrame = new byte[10];
+
+ // Header
+ // length
+ ByteUtil.setThreeBytes(headerFrame, 0, 1);
+ // type 1 (headers)
+ headerFrame[3] = 0x01;
+ // flags 8 (padded)
+ headerFrame[4] = 0x08;
+ // stream 3
+ ByteUtil.set31Bits(headerFrame, 5, 3);
+ // payload (pad length of 1)
+ headerFrame[9] = 1;
+
+ os.write(headerFrame);
+ os.flush();
+
+ parser.readFrame(true);
+
+ String trace = output.getTrace();
+ Assert.assertTrue(trace, trace.startsWith("0-Goaway-[1]-[1]-["));
+ }
+
+
+ @Test
+ public void testHeaderFrameWithZeroLengthPadding() throws Exception {
+ http2Connect();
+
+ byte[] padding= new byte[0];
+
+ sendSimpleGetRequest(3, padding);
+ readSimpleGetResponse();
+ Assert.assertEquals(getSimpleResponseTrace(3), output.getTrace());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org