blob: 8ba29d367c899d0e6a6409042a8c5c6d5feb745f [file] [log] [blame]
// 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