Plumb error code from HpackDecoder to HpackDecoderAdapter, add two error codes that are detected in HpackDecoderAdapter.
gfe-relnote: n/a (no functional change)
PiperOrigin-RevId: 293813721
Change-Id: I3ea4a72daab3e676a131ff8c05e18fa3d0b86d6e
diff --git a/spdy/core/hpack/hpack_decoder_adapter.cc b/spdy/core/hpack/hpack_decoder_adapter.cc
index fe9577d..8a4e17a 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -22,7 +22,8 @@
: hpack_decoder_(&listener_adapter_, kMaxDecodeBufferSizeBytes),
max_decode_buffer_size_bytes_(kMaxDecodeBufferSizeBytes),
max_header_block_bytes_(0),
- header_block_started_(false) {}
+ header_block_started_(false),
+ error_(http2::HpackDecodingError::kOk) {}
HpackDecoderAdapter::~HpackDecoderAdapter() = default;
@@ -50,6 +51,7 @@
if (!hpack_decoder_.StartDecodingBlock()) {
header_block_started_ = false;
SPDY_CODE_COUNT_N(decompress_failure_2, 1, 5);
+ error_ = hpack_decoder_.error();
return false;
}
}
@@ -64,12 +66,14 @@
<< max_decode_buffer_size_bytes_ << " < "
<< headers_data_length;
SPDY_CODE_COUNT_N(decompress_failure_2, 2, 5);
+ error_ = http2::HpackDecodingError::kFragmentTooLong;
return false;
}
listener_adapter_.AddToTotalHpackBytes(headers_data_length);
if (max_header_block_bytes_ != 0 &&
listener_adapter_.total_hpack_bytes() > max_header_block_bytes_) {
SPDY_CODE_COUNT_N(decompress_failure, 3, 5);
+ error_ = http2::HpackDecodingError::kCompressedHeaderSizeExceedsLimit;
return false;
}
http2::DecodeBuffer db(headers_data, headers_data_length);
@@ -77,6 +81,7 @@
DCHECK(!ok || db.Empty()) << "Remaining=" << db.Remaining();
if (!ok) {
SPDY_CODE_COUNT_N(decompress_failure_2, 4, 5);
+ error_ = hpack_decoder_.error();
}
return ok;
}
@@ -92,6 +97,7 @@
if (!hpack_decoder_.EndDecodingBlock()) {
SPDY_DVLOG(3) << "EndDecodingBlock returned false";
SPDY_CODE_COUNT_N(decompress_failure_2, 5, 5);
+ error_ = hpack_decoder_.error();
return false;
}
header_block_started_ = false;