Index: net/spdy/spdy_framer_test.cc |
diff --git a/net/spdy/spdy_framer_test.cc b/net/spdy/spdy_framer_test.cc |
index 739d8085f8cf8c0e600d2e11220d2847b5eb8d53..61ded3f43de16021c10157af6795b2230ec208dc 100644 |
--- a/net/spdy/spdy_framer_test.cc |
+++ b/net/spdy/spdy_framer_test.cc |
@@ -63,15 +63,9 @@ class SpdyFramerTestUtil { |
char* buffer = visitor.ReleaseBuffer(); |
CHECK(buffer != NULL); |
SpdyFrame* decompressed_frame = new SpdyFrame(buffer, visitor.size(), true); |
- if (framer->protocol_version() == 4) { |
- SetFrameLength(decompressed_frame, |
- visitor.size(), |
- framer->protocol_version()); |
- } else { |
- SetFrameLength(decompressed_frame, |
- visitor.size() - framer->GetControlFrameHeaderSize(), |
- framer->protocol_version()); |
- } |
+ SetFrameLength(decompressed_frame, |
+ visitor.size() - framer->GetControlFrameHeaderSize(), |
+ framer->protocol_version()); |
return decompressed_frame; |
} |
@@ -1053,43 +1047,43 @@ TEST_P(SpdyFramerTest, Basic) { |
// SYN_STREAM doesn't exist in SPDY4, so instead we send |
// HEADERS frames with PRIORITY and END_HEADERS set. |
const unsigned char kV4Input[] = { |
- 0x00, 0x0d, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
+ 0x00, 0x05, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x00, 0x00, 0x00, 0x00, // Priority 0 |
0x82, // :method: GET |
- 0x00, 0x09, 0x08, 0x04, // HEADERS: END_HEADERS |
+ 0x00, 0x01, 0x08, 0x04, // HEADERS: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x8c, // :status: 200 |
- 0x00, 0x14, 0x00, 0x00, // DATA on Stream #1 |
+ 0x00, 0x0c, 0x00, 0x00, // DATA on Stream #1 |
0x00, 0x00, 0x00, 0x01, |
0xde, 0xad, 0xbe, 0xef, |
0xde, 0xad, 0xbe, 0xef, |
0xde, 0xad, 0xbe, 0xef, |
- 0x00, 0x0d, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
+ 0x00, 0x05, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
0x00, 0x00, 0x00, 0x03, // Stream 3 |
0x00, 0x00, 0x00, 0x00, // Priority 0 |
0x82, // :method: GET |
- 0x00, 0x10, 0x00, 0x00, // DATA on Stream #3 |
+ 0x00, 0x08, 0x00, 0x00, // DATA on Stream #3 |
0x00, 0x00, 0x00, 0x03, |
0xde, 0xad, 0xbe, 0xef, |
0xde, 0xad, 0xbe, 0xef, |
- 0x00, 0x0c, 0x00, 0x00, // DATA on Stream #1 |
+ 0x00, 0x04, 0x00, 0x00, // DATA on Stream #1 |
0x00, 0x00, 0x00, 0x01, |
0xde, 0xad, 0xbe, 0xef, |
- 0x00, 0x0c, 0x03, 0x00, // RST_STREAM on Stream #1 |
+ 0x00, 0x04, 0x03, 0x00, // RST_STREAM on Stream #1 |
0x00, 0x00, 0x00, 0x01, |
0x00, 0x00, 0x00, 0x00, |
- 0x00, 0x08, 0x00, 0x00, // DATA on Stream #3 |
+ 0x00, 0x00, 0x00, 0x00, // DATA on Stream #3 |
0x00, 0x00, 0x00, 0x03, |
- 0x00, 0x17, 0x03, 0x00, // RST_STREAM on Stream #3 |
+ 0x00, 0x0f, 0x03, 0x00, // RST_STREAM on Stream #3 |
0x00, 0x00, 0x00, 0x03, |
0x00, 0x00, 0x00, 0x00, |
0x52, 0x45, 0x53, 0x45, // opaque data |
@@ -1188,22 +1182,22 @@ TEST_P(SpdyFramerTest, FinOnDataFrame) { |
// SYN_STREAM and SYN_REPLY don't exist in SPDY4, so instead we send |
// HEADERS frames with PRIORITY(SYN_STREAM only) and END_HEADERS set. |
const unsigned char kV4Input[] = { |
- 0x00, 0x0d, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
+ 0x00, 0x05, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x00, 0x00, 0x00, 0x00, // Priority 0 |
0x82, // :method: GET |
- 0x00, 0x09, 0x08, 0x04, // HEADERS: END_HEADERS |
+ 0x00, 0x01, 0x08, 0x04, // HEADERS: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x8c, // :status: 200 |
- 0x00, 0x14, 0x00, 0x00, // DATA on Stream #1 |
+ 0x00, 0x0c, 0x00, 0x00, // DATA on Stream #1 |
0x00, 0x00, 0x00, 0x01, |
0xde, 0xad, 0xbe, 0xef, |
0xde, 0xad, 0xbe, 0xef, |
0xde, 0xad, 0xbe, 0xef, |
- 0x00, 0x0c, 0x00, 0x01, // DATA on Stream #1, with FIN |
+ 0x00, 0x04, 0x00, 0x01, // DATA on Stream #1, with FIN |
0x00, 0x00, 0x00, 0x01, |
0xde, 0xad, 0xbe, 0xef, |
}; |
@@ -1274,12 +1268,12 @@ TEST_P(SpdyFramerTest, FinOnSynReplyFrame) { |
// SYN_STREAM and SYN_REPLY don't exist in SPDY4, so instead we send |
// HEADERS frames with PRIORITY(SYN_STREAM only) and END_HEADERS set. |
const unsigned char kV4Input[] = { |
- 0x00, 0x0d, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
+ 0x00, 0x05, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x00, 0x00, 0x00, 0x00, // Priority 0 |
0x82, // :method: GET |
- 0x00, 0x09, 0x08, 0x05, // HEADERS: FIN | END_HEADERS |
+ 0x00, 0x01, 0x08, 0x05, // HEADERS: FIN | END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x8c, // :status: 200 |
}; |
@@ -1482,15 +1476,15 @@ TEST_P(SpdyFramerTest, WindowUpdateFrame) { |
0x12, 0x34, 0x56, 0x78 |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0c, 0x09, 0x00, |
+ 0x00, 0x04, 0x09, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0x12, 0x34, 0x56, 0x78 |
}; |
if (IsSpdy4()) { |
- CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
+ CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); |
} else { |
- CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
+ CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
} |
} |
@@ -1506,7 +1500,7 @@ TEST_P(SpdyFramerTest, CreateDataFrame) { |
'o' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0d, 0x00, 0x00, |
+ 0x00, 0x05, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x01, |
'h', 'e', 'l', 'l', |
'o' |
@@ -1544,7 +1538,7 @@ TEST_P(SpdyFramerTest, CreateDataFrame) { |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x15, 0x00, 0x10, // Length = 13. PAD_LOW set. |
+ 0x00, 0x0d, 0x00, 0x10, // Length = 13. PAD_LOW set. |
0x00, 0x00, 0x00, 0x01, |
0x07, // Pad Low field. |
'h', 'e', 'l', 'l', // Data |
@@ -1575,7 +1569,7 @@ TEST_P(SpdyFramerTest, CreateDataFrame) { |
0xff |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x09, 0x00, 0x00, |
+ 0x00, 0x01, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0xff |
}; |
@@ -1599,7 +1593,7 @@ TEST_P(SpdyFramerTest, CreateDataFrame) { |
'o' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0d, 0x00, 0x01, |
+ 0x00, 0x05, 0x00, 0x01, |
0x00, 0x00, 0x00, 0x01, |
'h', 'e', 'l', 'l', |
'o' |
@@ -1623,7 +1617,7 @@ TEST_P(SpdyFramerTest, CreateDataFrame) { |
0x00, 0x00, 0x00, 0x00, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x08, 0x00, 0x00, |
+ 0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x01, |
}; |
net::SpdyDataIR data_ir(1, StringPiece()); |
@@ -1646,7 +1640,7 @@ TEST_P(SpdyFramerTest, CreateDataFrame) { |
'o' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0d, 0x00, 0x01, |
+ 0x00, 0x05, 0x00, 0x01, |
0x7f, 0xff, 0xff, 0xff, |
'h', 'e', 'l', 'l', |
'o' |
@@ -1723,7 +1717,7 @@ TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) { |
'a', 'r' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x1e, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
+ 0x00, 0x16, 0x08, 0x0c, // HEADERS: PRIORITY | END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x00, 0x00, 0x00, 0x07, // Priority 7 |
0x40, 0x03, 0x62, 0x61, // @.ba |
@@ -1778,7 +1772,7 @@ TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) { |
'b', 'a', 'r' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x1b, 0x08, 0x0d, // HEADERS: PRIORITY | FIN | END_HEADERS |
+ 0x00, 0x13, 0x08, 0x0d, // HEADERS: PRIORITY | FIN | END_HEADERS |
0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
0x00, 0x00, 0x00, 0x00, // Priority 0 |
0x40, 0x00, 0x03, 0x66, // @..f |
@@ -1835,7 +1829,7 @@ TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) { |
0x00, 0x00, 0x00 |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x1b, 0x08, 0x0d, // HEADERS: PRIORITY | FIN | END_HEADERS |
+ 0x00, 0x13, 0x08, 0x0d, // HEADERS: PRIORITY | FIN | END_HEADERS |
0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
0x00, 0x00, 0x00, 0x01, // Priority 1 |
0x40, 0x03, 0x62, 0x61, // @.ba |
@@ -1956,7 +1950,7 @@ TEST_P(SpdyFramerTest, CreateSynReplyUncompressed) { |
0x03, 'b', 'a', 'r' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x1a, 0x08, 0x04, // HEADER: END_HEADERS |
+ 0x00, 0x12, 0x08, 0x04, // HEADER: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x03, 0x62, 0x61, // @.ba |
0x72, 0x03, 0x66, 0x6f, // r.fo |
@@ -2006,7 +2000,7 @@ TEST_P(SpdyFramerTest, CreateSynReplyUncompressed) { |
'r' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x17, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
+ 0x00, 0x0f, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
0x40, 0x00, 0x03, 0x66, // @..f |
0x6f, 0x6f, 0x40, 0x03, // oo@. |
@@ -2056,7 +2050,7 @@ TEST_P(SpdyFramerTest, CreateSynReplyUncompressed) { |
0x00 |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x17, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
+ 0x00, 0x0f, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
0x40, 0x03, 0x62, 0x61, // @.ba |
0x72, 0x03, 0x66, 0x6f, // r.fo |
@@ -2149,7 +2143,7 @@ TEST_P(SpdyFramerTest, CreateRstStream) { |
0x00, 0x00, 0x00, 0x01, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0f, 0x03, 0x00, |
+ 0x00, 0x07, 0x03, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0x00, 0x00, 0x00, 0x01, |
0x52, 0x53, 0x54 |
@@ -2172,7 +2166,7 @@ TEST_P(SpdyFramerTest, CreateRstStream) { |
0x00, 0x00, 0x00, 0x01, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0c, 0x03, 0x00, |
+ 0x00, 0x04, 0x03, 0x00, |
0x7f, 0xff, 0xff, 0xff, |
0x00, 0x00, 0x00, 0x01, |
}; |
@@ -2196,7 +2190,7 @@ TEST_P(SpdyFramerTest, CreateRstStream) { |
0x00, 0x00, 0x00, 0x06, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0c, 0x03, 0x00, |
+ 0x00, 0x04, 0x03, 0x00, |
0x7f, 0xff, 0xff, 0xff, |
0x00, 0x00, 0x00, 0x06, |
}; |
@@ -2233,7 +2227,7 @@ TEST_P(SpdyFramerTest, CreateSettings) { |
0x0a, 0x0b, 0x0c, 0x0d, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0d, 0x04, 0x00, |
+ 0x00, 0x05, 0x04, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x01, 0x0a, 0x0b, 0x0c, |
0x0d, |
@@ -2293,7 +2287,7 @@ TEST_P(SpdyFramerTest, CreateSettings) { |
0xff, 0x00, 0x00, 0x04, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x1c, 0x04, 0x00, |
+ 0x00, 0x14, 0x04, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x01, // 1st Setting |
0x00, 0x00, 0x00, 0x01, |
@@ -2341,7 +2335,7 @@ TEST_P(SpdyFramerTest, CreateSettings) { |
0x00, 0x00, 0x00, 0x00, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x08, 0x04, 0x00, |
+ 0x00, 0x00, 0x04, 0x00, |
0x00, 0x00, 0x00, 0x00, |
}; |
SpdySettingsIR settings_ir; |
@@ -2365,13 +2359,13 @@ TEST_P(SpdyFramerTest, CreatePingFrame) { |
0x12, 0x34, 0x56, 0x78, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x10, 0x06, 0x00, |
+ 0x00, 0x08, 0x06, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x12, 0x34, 0x56, 0x78, |
0x9a, 0xbc, 0xde, 0xff, |
}; |
const unsigned char kV4FrameDataWithAck[] = { |
- 0x00, 0x10, 0x06, 0x01, |
+ 0x00, 0x08, 0x06, 0x01, |
0x00, 0x00, 0x00, 0x00, |
0x12, 0x34, 0x56, 0x78, |
0x9a, 0xbc, 0xde, 0xff, |
@@ -2415,7 +2409,7 @@ TEST_P(SpdyFramerTest, CreateGoAway) { |
0x00, 0x00, 0x00, 0x00, // Status |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x12, 0x07, 0x00, |
+ 0x00, 0x0a, 0x07, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x00, 0x00, 0x00, 0x00, // Stream id |
0x00, 0x00, 0x00, 0x00, // Status |
@@ -2446,7 +2440,7 @@ TEST_P(SpdyFramerTest, CreateGoAway) { |
0x00, 0x00, 0x00, 0x02, // Status |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x12, 0x07, 0x00, |
+ 0x00, 0x0a, 0x07, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x7f, 0xff, 0xff, 0xff, // Stream Id |
0x00, 0x00, 0x00, 0x02, // Status |
@@ -2496,7 +2490,7 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) { |
0x03, 'b', 'a', 'r' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x1a, 0x08, 0x04, // Headers: END_HEADERS |
+ 0x00, 0x12, 0x08, 0x04, // Headers: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x03, 0x62, 0x61, // @.ba |
0x72, 0x03, 0x66, 0x6f, // r.fo |
@@ -2546,7 +2540,7 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) { |
'r' |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x17, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
+ 0x00, 0x0f, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
0x40, 0x00, 0x03, 0x66, // @..f |
0x6f, 0x6f, 0x40, 0x03, // oo@. |
@@ -2596,7 +2590,7 @@ TEST_P(SpdyFramerTest, CreateHeadersUncompressed) { |
0x00 |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x17, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
+ 0x00, 0x0f, 0x08, 0x05, // HEADER: FIN | END_HEADERS |
0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
0x40, 0x03, 0x62, 0x61, // @.ba |
0x72, 0x03, 0x66, 0x6f, // r.fo |
@@ -2689,7 +2683,7 @@ TEST_P(SpdyFramerTest, CreateWindowUpdate) { |
0x00, 0x00, 0x00, 0x01, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0c, 0x09, 0x00, |
+ 0x00, 0x04, 0x09, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0x00, 0x00, 0x00, 0x01, |
}; |
@@ -2711,7 +2705,7 @@ TEST_P(SpdyFramerTest, CreateWindowUpdate) { |
0x00, 0x00, 0x00, 0x01, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0c, 0x09, 0x00, |
+ 0x00, 0x04, 0x09, 0x00, |
0x7f, 0xff, 0xff, 0xff, |
0x00, 0x00, 0x00, 0x01, |
}; |
@@ -2733,7 +2727,7 @@ TEST_P(SpdyFramerTest, CreateWindowUpdate) { |
0x7f, 0xff, 0xff, 0xff, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x0c, 0x09, 0x00, |
+ 0x00, 0x04, 0x09, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0x7f, 0xff, 0xff, 0xff, |
}; |
@@ -2756,7 +2750,7 @@ TEST_P(SpdyFramerTest, SerializeBlocked) { |
const char kDescription[] = "BLOCKED frame"; |
const unsigned char kFrameData[] = { |
- 0x00, 0x08, 0x0b, 0x00, |
+ 0x00, 0x00, 0x0b, 0x00, |
0x00, 0x00, 0x00, 0x00, |
}; |
SpdyBlockedIR blocked_ir(0); |
@@ -2793,7 +2787,7 @@ TEST_P(SpdyFramerTest, CreatePushPromise) { |
const char kDescription[] = "PUSH_PROMISE frame"; |
const unsigned char kFrameData[] = { |
- 0x00, 0x1e, 0x0c, 0x04, // PUSH_PROMISE: END_HEADERS |
+ 0x00, 0x16, 0x0c, 0x04, // PUSH_PROMISE: END_HEADERS |
0x00, 0x00, 0x00, 0x2a, // Stream 42 |
0x00, 0x00, 0x00, 0x39, // Promised stream 57 |
0x40, 0x03, 0x62, 0x61, // @.ba |
@@ -3060,7 +3054,8 @@ TEST_P(SpdyFramerTest, ControlFrameSizesAreValidated) { |
// SPDY version 4 and up GOAWAY frames are only bound to a minimal length, |
// since it may carry opaque data. Verify that minimal length is tested. |
- const unsigned char less_than_min_length = framer.GetGoAwayMinimumSize() - 1; |
+ const unsigned char less_than_min_length = |
+ framer.GetGoAwayMinimumSize() - framer.GetControlFrameHeaderSize() - 1; |
const unsigned char kV4FrameData[] = { |
0x00, static_cast<uint8>(less_than_min_length), 0x07, 0x00, |
0x00, 0x00, 0x00, 0x00, |
@@ -3099,8 +3094,13 @@ TEST_P(SpdyFramerTest, ReadZeroLenSettingsFrame) { |
visitor.SimulateInFramer( |
reinterpret_cast<unsigned char*>(control_frame->data()), |
framer.GetControlFrameHeaderSize()); |
- // Should generate an error, since zero-len settings frames are unsupported. |
- EXPECT_EQ(1, visitor.error_count_); |
+ if (spdy_version_ < 4) { |
+ // Should generate an error, since zero-len settings frames are unsupported. |
+ EXPECT_EQ(1, visitor.error_count_); |
+ } else { |
+ // Zero-len settings frames are permitted as of SPDY 4. |
+ EXPECT_EQ(0, visitor.error_count_); |
+ } |
} |
// Tests handling of SETTINGS frames with invalid length. |
@@ -3213,7 +3213,7 @@ TEST_P(SpdyFramerTest, ReadDuplicateSettings) { |
0x00, 0x00, 0x00, 0x03, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x17, 0x04, 0x00, |
+ 0x00, 0x0f, 0x04, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x01, // 1st Setting |
0x00, 0x00, 0x00, 0x02, |
@@ -3272,7 +3272,7 @@ TEST_P(SpdyFramerTest, ReadOutOfOrderSettings) { |
0x00, 0x00, 0x00, 0x03, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x17, 0x04, 0x00, |
+ 0x00, 0x0f, 0x04, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0x02, // 1st Setting |
0x00, 0x00, 0x00, 0x02, |
@@ -3310,7 +3310,7 @@ TEST_P(SpdyFramerTest, ProcessSettingsAckFrame) { |
SpdyFramer framer(spdy_version_); |
const unsigned char kFrameData[] = { |
- 0x00, 0x08, 0x04, 0x01, |
+ 0x00, 0x00, 0x04, 0x01, |
0x00, 0x00, 0x00, 0x00, |
}; |
@@ -3480,7 +3480,7 @@ TEST_P(SpdyFramerTest, CreateContinuation) { |
const char kDescription[] = "CONTINUATION frame"; |
const unsigned char kFrameData[] = { |
- 0x00, 0x1a, 0x0d, 0x00, // CONTINUATION |
+ 0x00, 0x12, 0x0d, 0x00, // CONTINUATION |
0x00, 0x00, 0x00, 0x2a, // Stream 42 |
0x40, 0x03, 0x62, 0x61, // @.ba |
0x72, 0x03, 0x66, 0x6f, // r.fo |
@@ -3526,14 +3526,14 @@ TEST_P(SpdyFramerTest, ReadHeadersWithContinuation) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x18, 0x08, 0x00, // HEADERS |
+ 0x00, 0x10, 0x08, 0x00, // HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
0x07, 0x66, 0x6f, 0x6f, |
0x3d, 0x62, 0x61, 0x72, |
- 0x00, 0x1c, 0x0D, 0x00, // CONTINUATION |
+ 0x00, 0x14, 0x0D, 0x00, // CONTINUATION |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3541,7 +3541,7 @@ TEST_P(SpdyFramerTest, ReadHeadersWithContinuation) { |
0x3d, 0x62, 0x69, 0x6e, |
0x67, 0x40, 0x06, 0x43, |
- 0x00, 0x1a, 0x0D, 0x04, // CONTINUATION: END_HEADERS |
+ 0x00, 0x12, 0x0D, 0x04, // CONTINUATION: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x6f, 0x6f, 0x6b, 0x69, |
0x65, 0x00, 0x40, 0x04, |
@@ -3571,14 +3571,14 @@ TEST_P(SpdyFramerTest, ReadHeadersWithContinuationAndFin) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x18, 0x08, 0x01, // HEADERS: FIN |
+ 0x00, 0x10, 0x08, 0x01, // HEADERS: FIN |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
0x07, 0x66, 0x6f, 0x6f, |
0x3d, 0x62, 0x61, 0x72, |
- 0x00, 0x1c, 0x0D, 0x00, // CONTINUATION |
+ 0x00, 0x14, 0x0D, 0x00, // CONTINUATION |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3586,7 +3586,7 @@ TEST_P(SpdyFramerTest, ReadHeadersWithContinuationAndFin) { |
0x3d, 0x62, 0x69, 0x6e, |
0x67, 0x40, 0x06, 0x43, |
- 0x00, 0x1a, 0x0D, 0x04, // CONTINUATION: END_HEADERS |
+ 0x00, 0x12, 0x0D, 0x04, // CONTINUATION: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x6f, 0x6f, 0x6b, 0x69, |
0x65, 0x00, 0x40, 0x04, |
@@ -3617,7 +3617,7 @@ TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x1c, 0x0C, 0x00, // PUSH_PROMISE |
+ 0x00, 0x14, 0x0C, 0x00, // PUSH_PROMISE |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x00, 0x00, 0x00, 0x2A, // Promised stream 42 |
0x40, 0x06, 0x43, 0x6f, |
@@ -3625,7 +3625,7 @@ TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) { |
0x07, 0x66, 0x6f, 0x6f, |
0x3d, 0x62, 0x61, 0x72, |
- 0x00, 0x1c, 0x0D, 0x00, // CONTINUATION |
+ 0x00, 0x14, 0x0D, 0x00, // CONTINUATION |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3633,7 +3633,7 @@ TEST_P(SpdyFramerTest, ReadPushPromiseWithContinuation) { |
0x3d, 0x62, 0x69, 0x6e, |
0x67, 0x40, 0x06, 0x43, |
- 0x00, 0x1a, 0x0D, 0x04, // CONTINUATION: END_HEADERS |
+ 0x00, 0x12, 0x0D, 0x04, // CONTINUATION: END_HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x6f, 0x6f, 0x6b, 0x69, |
0x65, 0x00, 0x40, 0x04, |
@@ -3664,14 +3664,14 @@ TEST_P(SpdyFramerTest, ReadContinuationWithWrongStreamId) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x18, 0x08, 0x00, // HEADERS |
+ 0x00, 0x10, 0x08, 0x00, // HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
0x07, 0x66, 0x6f, 0x6f, |
0x3d, 0x62, 0x61, 0x72, |
- 0x00, 0x1c, 0x0D, 0x00, // CONTINUATION |
+ 0x00, 0x14, 0x0D, 0x00, // CONTINUATION |
0x00, 0x00, 0x00, 0x02, // Stream 2 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3700,7 +3700,7 @@ TEST_P(SpdyFramerTest, ReadContinuationOutOfOrder) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x18, 0x0D, 0x00, // CONTINUATION |
+ 0x00, 0x10, 0x0D, 0x00, // CONTINUATION |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3727,7 +3727,7 @@ TEST_P(SpdyFramerTest, ExpectContinuationReceiveData) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x18, 0x08, 0x00, // HEADERS |
+ 0x00, 0x10, 0x08, 0x00, // HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3760,14 +3760,14 @@ TEST_P(SpdyFramerTest, ExpectContinuationReceiveControlFrame) { |
} |
const unsigned char kInput[] = { |
- 0x00, 0x18, 0x08, 0x00, // HEADERS |
+ 0x00, 0x10, 0x08, 0x00, // HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, |
0x6f, 0x6b, 0x69, 0x65, |
0x07, 0x66, 0x6f, 0x6f, |
0x3d, 0x62, 0x61, 0x72, |
- 0x00, 0x1c, 0x08, 0x00, // HEADERS |
+ 0x00, 0x14, 0x08, 0x00, // HEADERS |
0x00, 0x00, 0x00, 0x01, // Stream 1 |
0x40, 0x06, 0x43, 0x6f, // (Note this is a valid continued encoding). |
0x6f, 0x6b, 0x69, 0x65, |
@@ -3801,6 +3801,23 @@ TEST_P(SpdyFramerTest, ReadGarbage) { |
EXPECT_EQ(1, visitor.error_count_); |
} |
+TEST_P(SpdyFramerTest, ReadGarbageWithValidLength) { |
+ if (!IsSpdy4()) { |
+ return; |
+ } |
+ SpdyFramer framer(spdy_version_); |
+ const unsigned char kFrameData[] = { |
+ 0x00, 0x10, 0xff, 0xff, |
+ 0xff, 0xff, 0xff, 0xff, |
+ 0xff, 0xff, 0xff, 0xff, |
+ 0xff, 0xff, 0xff, 0xff, |
+ }; |
+ TestSpdyVisitor visitor(spdy_version_); |
+ visitor.use_compression_ = false; |
+ visitor.SimulateInFramer(kFrameData, arraysize(kFrameData)); |
+ EXPECT_EQ(1, visitor.error_count_); |
+} |
+ |
TEST_P(SpdyFramerTest, ReadGarbageWithValidVersion) { |
if (IsSpdy4()) { |
// Not valid for SPDY 4 since there is no version field. |
@@ -4592,17 +4609,10 @@ TEST_P(SpdyFramerTest, EmptySynStream) { |
syn_stream.set_priority(1); |
scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
// Adjust size to remove the name/value block. |
- if (IsSpdy4()) { |
- SetFrameLength( |
- frame.get(), |
- framer.GetSynStreamMinimumSize(), |
- spdy_version_); |
- } else { |
- SetFrameLength( |
- frame.get(), |
- framer.GetSynStreamMinimumSize() - framer.GetControlFrameHeaderSize(), |
- spdy_version_); |
- } |
+ SetFrameLength( |
+ frame.get(), |
+ framer.GetSynStreamMinimumSize() - framer.GetControlFrameHeaderSize(), |
+ spdy_version_); |
EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(1, SYN_STREAM, _)); |
EXPECT_CALL(visitor, OnSynStream(1, 0, 1, false, false)); |
@@ -4637,7 +4647,7 @@ TEST_P(SpdyFramerTest, RstStreamStatusBounds) { |
0x00, 0x00, 0x00, RST_STREAM_INVALID |
}; |
const unsigned char kV4RstStreamInvalid[] = { |
- 0x00, 0x0c, 0x03, 0x00, |
+ 0x00, 0x04, 0x03, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0x00, 0x00, 0x00, RST_STREAM_INVALID |
}; |
@@ -4649,7 +4659,7 @@ TEST_P(SpdyFramerTest, RstStreamStatusBounds) { |
0x00, 0x00, 0x00, RST_STREAM_NUM_STATUS_CODES |
}; |
const unsigned char kV4RstStreamNumStatusCodes[] = { |
- 0x00, 0x0c, 0x03, 0x00, |
+ 0x00, 0x04, 0x03, 0x00, |
0x00, 0x00, 0x00, 0x01, |
0x00, 0x00, 0x00, RST_STREAM_NUM_STATUS_CODES |
}; |
@@ -4699,7 +4709,7 @@ TEST_P(SpdyFramerTest, GoAwayStreamIdBounds) { |
0x00, 0x00, 0x00, 0x00, |
}; |
const unsigned char kV4FrameData[] = { |
- 0x00, 0x10, 0x07, 0x00, |
+ 0x00, 0x08, 0x07, 0x00, |
0x00, 0x00, 0x00, 0x00, |
0xff, 0xff, 0xff, 0xff, |
0x00, 0x00, 0x00, 0x00, |