Surface hpack decoder detailed error for header value too long, and put detailed error to quic connection close error details. only change connection close error detail, not protected.
PiperOrigin-RevId: 323008871
Change-Id: I6f41118464ae686fbfeb009c8ac13d83b8fff3f0
diff --git a/spdy/core/hpack/hpack_decoder_adapter.cc b/spdy/core/hpack/hpack_decoder_adapter.cc
index 4c44635..cf9a0e7 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -51,6 +51,7 @@
if (!hpack_decoder_.StartDecodingBlock()) {
header_block_started_ = false;
error_ = hpack_decoder_.error();
+ detailed_error_ = hpack_decoder_.detailed_error();
return false;
}
}
@@ -65,12 +66,14 @@
<< max_decode_buffer_size_bytes_ << " < "
<< headers_data_length;
error_ = http2::HpackDecodingError::kFragmentTooLong;
+ detailed_error_ = "";
return false;
}
listener_adapter_.AddToTotalHpackBytes(headers_data_length);
if (max_header_block_bytes_ != 0 &&
listener_adapter_.total_hpack_bytes() > max_header_block_bytes_) {
error_ = http2::HpackDecodingError::kCompressedHeaderSizeExceedsLimit;
+ detailed_error_ = "";
return false;
}
http2::DecodeBuffer db(headers_data, headers_data_length);
@@ -78,6 +81,7 @@
DCHECK(!ok || db.Empty()) << "Remaining=" << db.Remaining();
if (!ok) {
error_ = hpack_decoder_.error();
+ detailed_error_ = hpack_decoder_.detailed_error();
}
return ok;
}
@@ -93,6 +97,7 @@
if (!hpack_decoder_.EndDecodingBlock()) {
SPDY_DVLOG(3) << "EndDecodingBlock returned false";
error_ = hpack_decoder_.error();
+ detailed_error_ = hpack_decoder_.detailed_error();
return false;
}
header_block_started_ = false;
diff --git a/spdy/core/hpack/hpack_decoder_adapter.h b/spdy/core/hpack/hpack_decoder_adapter.h
index 3ff3b4b..f521ee1 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.h
+++ b/spdy/core/hpack/hpack_decoder_adapter.h
@@ -88,6 +88,8 @@
// Error code if an error has occurred, Error::kOk otherwise.
http2::HpackDecodingError error() const { return error_; }
+ std::string detailed_error() const { return detailed_error_; }
+
private:
class QUICHE_EXPORT_PRIVATE ListenerAdapter
: public http2::HpackDecoderListener,
@@ -164,6 +166,7 @@
// Error code if an error has occurred, Error::kOk otherwise.
http2::HpackDecodingError error_;
+ std::string detailed_error_;
};
} // namespace spdy