Index: net/spdy/spdy_network_transaction_unittest.cc |
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc |
index ba42d831330c1935550eb0bcfa470bde93ae6e5e..d5b7a073441b6111195bdb9dd9e963520c3411c4 100644 |
--- a/net/spdy/spdy_network_transaction_unittest.cc |
+++ b/net/spdy/spdy_network_transaction_unittest.cc |
@@ -6449,6 +6449,47 @@ TEST_P(SpdyNetworkTransactionTest, LargeRequest) { |
EXPECT_EQ("hello!", out.response_data); |
} |
+// Regression test for https://crbug.com/535629: response header exceeds 16 kB. |
+TEST_P(SpdyNetworkTransactionTest, LargeResponseHeader) { |
+ scoped_ptr<SpdyHeaderBlock> headers( |
+ spdy_util_.ConstructGetHeaderBlock(GetDefaultUrl())); |
+ scoped_ptr<SpdyFrame> req( |
+ spdy_util_.ConstructSpdySyn(1, *headers, LOWEST, false, true)); |
+ MockWrite writes[] = { |
+ CreateMockWrite(*req, 0), |
+ }; |
+ |
+ // HPACK decoder implementation limits string literal length to 16 kB. |
+ const char* response_headers[2]; |
+ const std::string kKey(16 * 1024, 'a'); |
+ response_headers[0] = kKey.data(); |
+ const std::string kValue(16 * 1024, 'b'); |
+ response_headers[1] = kValue.data(); |
+ |
+ scoped_ptr<SpdyFrame> resp( |
+ spdy_util_.ConstructSpdyGetSynReply(response_headers, 1, 1)); |
+ scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
+ MockRead reads[] = { |
+ CreateMockRead(*resp, 1), CreateMockRead(*body, 2), |
+ MockRead(ASYNC, 0, 3) // EOF |
+ }; |
+ |
+ HttpRequestInfo request; |
+ request.method = "GET"; |
+ request.url = GURL(GetDefaultUrl()); |
+ NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(), |
+ GetParam(), nullptr); |
+ |
+ SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
+ helper.RunToCompletion(&data); |
+ TransactionHelperResult out = helper.output(); |
+ |
+ EXPECT_EQ(OK, out.rv); |
+ EXPECT_EQ("HTTP/1.1 200", out.status_line); |
+ EXPECT_EQ("hello!", out.response_data); |
+ ASSERT_TRUE(out.response_info.headers->HasHeaderValue(kKey, kValue)); |
+} |
+ |
class SpdyNetworkTransactionNoTLSUsageCheckTest |
: public SpdyNetworkTransactionTest { |
protected: |