Crash on invalid encoder or decoder stream data in qpack_round_trip_fuzzer.cc.

Since encoder stream data is generated by QpackEncoder and decoder stream data
is generated by QpackDecoder, data must not be corrupt.  A crash would mean
there is a bug in our implementation.

gfe-relnote: n/a, change in QPACK fuzzer only.
PiperOrigin-RevId: 262612270
Change-Id: I5b2d69b8bbceb25aec805f819cf2141cc744a970
diff --git a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
index f44863b..84accd0 100644
--- a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
@@ -7,8 +7,9 @@
 #include <cstdint>
 #include <string>
 
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h"
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder_test_utils.h"
-#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder.h"
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
 #include "net/third_party/quiche/src/quic/core/qpack/value_splitting_header_list.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_fuzzed_data_provider.h"
@@ -17,6 +18,28 @@
 namespace quic {
 namespace test {
 
+// DecoderStreamErrorDelegate implementation that crashes on error.
+class CrashingDecoderStreamErrorDelegate
+    : public QpackEncoder::DecoderStreamErrorDelegate {
+ public:
+  ~CrashingDecoderStreamErrorDelegate() override = default;
+
+  void OnDecoderStreamError(QuicStringPiece error_message) override {
+    CHECK(false) << error_message;
+  }
+};
+
+// EncoderStreamErrorDelegate implementation that crashes on error.
+class CrashingEncoderStreamErrorDelegate
+    : public QpackDecoder::EncoderStreamErrorDelegate {
+ public:
+  ~CrashingEncoderStreamErrorDelegate() override = default;
+
+  void OnEncoderStreamError(QuicStringPiece error_message) override {
+    CHECK(false) << error_message;
+  }
+};
+
 spdy::SpdyHeaderBlock GenerateHeaderList(QuicFuzzedDataProvider* provider) {
   spdy::SpdyHeaderBlock header_list;
   uint8_t header_count = provider->ConsumeIntegral<uint8_t>();
@@ -174,8 +197,7 @@
   const uint64_t maximum_blocked_streams = provider.ConsumeIntegral<uint8_t>();
 
   // Set up encoder.
-  // TODO: crash on decoder stream error
-  NoopDecoderStreamErrorDelegate decoder_stream_error_delegate;
+  CrashingDecoderStreamErrorDelegate decoder_stream_error_delegate;
   NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
   QpackEncoder encoder(&decoder_stream_error_delegate);
   encoder.set_qpack_stream_sender_delegate(&encoder_stream_sender_delegate);
@@ -183,8 +205,7 @@
   encoder.SetMaximumBlockedStreams(maximum_blocked_streams);
 
   // Set up decoder.
-  // TODO: crash on encoder stream error
-  NoopEncoderStreamErrorDelegate encoder_stream_error_delegate;
+  CrashingEncoderStreamErrorDelegate encoder_stream_error_delegate;
   NoopQpackStreamSenderDelegate decoder_stream_sender_delegate;
   QpackDecoder decoder(maximum_dynamic_table_capacity, maximum_blocked_streams,
                        &encoder_stream_error_delegate);