Flush buffered decoder stream data in qpack_round_trip_fuzzer.

EncodingEndpoint destructor CHECKs that all references have been acknowledged.
This condition was violated since decoder stream data was delayed at
cl/557313748 and cl/582131467.

Changing the fuzzing engine to FuzzTests covered this issue, because it flips
flags by default when fuzzing. This change allows FuzzTest to be turned back on
for qpack_round_trip_fuzzer.

Startblock:
  * BTRGuardian allows cl/583126309
PiperOrigin-RevId: 583465270
diff --git a/quiche/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc b/quiche/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
index b046565..31367b3 100644
--- a/quiche/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
+++ b/quiche/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
@@ -313,9 +313,11 @@
                          public VerifyingDecoder::Visitor {
  public:
   DecodingEndpoint(uint64_t maximum_dynamic_table_capacity,
-                   uint64_t maximum_blocked_streams)
+                   uint64_t maximum_blocked_streams,
+                   FuzzedDataProvider* provider)
       : decoder_(maximum_dynamic_table_capacity, maximum_blocked_streams,
-                 &encoder_stream_error_delegate_) {}
+                 &encoder_stream_error_delegate_),
+        provider_(provider) {}
 
   ~DecodingEndpoint() override {
     // All decoding must have been completed.
@@ -385,6 +387,14 @@
     it->second->EndHeaderBlock();
   }
 
+  // Flush decoder stream data buffered within the decoder.
+  void FlushDecoderStream() { decoder_.FlushDecoderStream(); }
+  void MaybeFlushDecoderStream() {
+    if (provider_->ConsumeBool()) {
+      FlushDecoderStream();
+    }
+  }
+
  private:
   // EncoderStreamErrorDelegate implementation that crashes on error.
   class CrashingEncoderStreamErrorDelegate
@@ -401,6 +411,7 @@
 
   CrashingEncoderStreamErrorDelegate encoder_stream_error_delegate_;
   QpackDecoder decoder_;
+  FuzzedDataProvider* const provider_;
 
   // Expected header lists in order for each stream.
   std::map<QuicStreamId, std::queue<QuicHeaderList>> expected_header_lists_;
@@ -593,7 +604,7 @@
 
   // Set up decoder.
   DecodingEndpoint decoder(maximum_dynamic_table_capacity,
-                           maximum_blocked_streams);
+                           maximum_blocked_streams, &provider);
 
   // Transmit encoder stream data from encoder to decoder.
   DelayedStreamDataTransmitter encoder_stream_transmitter(
@@ -639,6 +650,7 @@
     for (auto transmit_data_count = provider.ConsumeIntegralInRange(1, 5);
          transmit_data_count > 0; --transmit_data_count) {
       encoder_stream_transmitter.MaybeTransmitSomeData();
+      decoder.MaybeFlushDecoderStream();
       decoder_stream_transmitter.MaybeTransmitSomeData();
       header_block_transmitter.MaybeTransmitSomeData();
     }
@@ -651,6 +663,9 @@
   encoder_stream_transmitter.Flush();
   // Release all delayed header blocks.
   header_block_transmitter.Flush();
+  // Flush decoder stream data buffered within the decoder. This will then be
+  // buffered in and delayed by `decoder_stream_transmitter`.
+  decoder.FlushDecoderStream();
   // Release all delayed decoder stream data.
   decoder_stream_transmitter.Flush();