Add QpackDecoderStreamSender fuzzer.
PiperOrigin-RevId: 404600470
diff --git a/quic/core/qpack/fuzzer/qpack_decoder_stream_sender_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_decoder_stream_sender_fuzzer.cc
new file mode 100644
index 0000000..8ba29d3
--- /dev/null
+++ b/quic/core/qpack/fuzzer/qpack_decoder_stream_sender_fuzzer.cc
@@ -0,0 +1,54 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include <cstddef>
+#include <cstdint>
+
+#include "quic/core/qpack/qpack_decoder_stream_sender.h"
+#include "quic/core/quic_types.h"
+#include "quic/test_tools/qpack/qpack_test_utils.h"
+
+namespace quic {
+namespace test {
+
+// This fuzzer exercises QpackDecoderStreamSender.
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ NoopQpackStreamSenderDelegate delegate;
+ QpackDecoderStreamSender sender;
+ sender.set_qpack_stream_sender_delegate(&delegate);
+
+ FuzzedDataProvider provider(data, size);
+
+ while (provider.remaining_bytes() != 0) {
+ switch (provider.ConsumeIntegral<uint8_t>() % 4) {
+ case 0: {
+ uint64_t increment = provider.ConsumeIntegral<uint64_t>();
+ sender.SendInsertCountIncrement(increment);
+ break;
+ }
+ case 1: {
+ QuicStreamId stream_id = provider.ConsumeIntegral<QuicStreamId>();
+ sender.SendHeaderAcknowledgement(stream_id);
+ break;
+ }
+ case 2: {
+ QuicStreamId stream_id = provider.ConsumeIntegral<QuicStreamId>();
+ sender.SendStreamCancellation(stream_id);
+ break;
+ }
+ case 3: {
+ sender.Flush();
+ break;
+ }
+ }
+ }
+
+ sender.Flush();
+ return 0;
+}
+
+} // namespace test
+} // namespace quic