Add HTTP/3 error codes, use them in HttpDecoder and for unexpected frames in QuicSpdyStream and QuicReceiveControlStream.
ENUM_VALUE_OK=Only changing value of sentinel entry QUIC_LAST_ERROR.
gfe-relnote: n/a, change to QUIC v99-only code. Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99.
PiperOrigin-RevId: 290374408
Change-Id: I90837f021f0dd585f8015d2fcae37d0d0eacfed6
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index 164b119..8616ab7 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -497,7 +497,8 @@
QuicStreamFrame frame(GetNthClientInitiatedBidirectionalId(0), false, 0,
quiche::QuicheStringPiece(data));
- EXPECT_CALL(*connection_, CloseConnection(QUIC_HTTP_DECODER_ERROR, _, _))
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM, _, _))
.WillOnce(
(Invoke([this](QuicErrorCode error, const std::string& error_details,
ConnectionCloseBehavior connection_close_behavior) {
@@ -516,6 +517,39 @@
stream_->OnStreamFrame(frame);
}
+TEST_P(QuicSpdyStreamTest, Http3FrameError) {
+ if (!UsesHttp3()) {
+ return;
+ }
+
+ Initialize(kShouldProcessData);
+
+ // PUSH_PROMISE frame with empty payload is considered invalid.
+ std::string invalid_http3_frame = quiche::QuicheTextUtils::HexDecode("0500");
+ QuicStreamFrame stream_frame(stream_->id(), /* fin = */ false,
+ /* offset = */ 0, invalid_http3_frame);
+
+ EXPECT_CALL(*connection_, CloseConnection(QUIC_HTTP_FRAME_ERROR, _, _));
+ stream_->OnStreamFrame(stream_frame);
+}
+
+TEST_P(QuicSpdyStreamTest, UnexpectedHttp3Frame) {
+ if (!UsesHttp3()) {
+ return;
+ }
+
+ Initialize(kShouldProcessData);
+
+ // SETTINGS frame with empty payload.
+ std::string settings = quiche::QuicheTextUtils::HexDecode("0400");
+ QuicStreamFrame stream_frame(stream_->id(), /* fin = */ false,
+ /* offset = */ 0, settings);
+
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM, _, _));
+ stream_->OnStreamFrame(stream_frame);
+}
+
TEST_P(QuicSpdyStreamTest, ProcessHeadersAndBody) {
Initialize(kShouldProcessData);
@@ -2553,7 +2587,8 @@
EXPECT_EQ(0u, stream_->sequencer()->NumBytesConsumed());
- EXPECT_CALL(*connection_, CloseConnection(QUIC_HTTP_DECODER_ERROR, _, _))
+ EXPECT_CALL(*connection_,
+ CloseConnection(QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM, _, _))
.WillOnce(
Invoke(connection_, &MockQuicConnection::ReallyCloseConnection));
EXPECT_CALL(*connection_, SendConnectionClosePacket(_, _));