1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <fuzzer/FuzzedDataProvider.h> 6 7 #include <cstddef> 8 #include <cstdint> 9 10 #include "quiche/quic/core/qpack/qpack_decoder_stream_sender.h" 11 #include "quiche/quic/core/quic_types.h" 12 #include "quiche/quic/test_tools/qpack/qpack_test_utils.h" 13 14 namespace quic { 15 namespace test { 16 17 // This fuzzer exercises QpackDecoderStreamSender. LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)18extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { 19 NoopQpackStreamSenderDelegate delegate; 20 QpackDecoderStreamSender sender; 21 sender.set_qpack_stream_sender_delegate(&delegate); 22 23 FuzzedDataProvider provider(data, size); 24 25 while (provider.remaining_bytes() != 0) { 26 switch (provider.ConsumeIntegral<uint8_t>() % 4) { 27 case 0: { 28 uint64_t increment = provider.ConsumeIntegral<uint64_t>(); 29 sender.SendInsertCountIncrement(increment); 30 break; 31 } 32 case 1: { 33 QuicStreamId stream_id = provider.ConsumeIntegral<QuicStreamId>(); 34 sender.SendHeaderAcknowledgement(stream_id); 35 break; 36 } 37 case 2: { 38 QuicStreamId stream_id = provider.ConsumeIntegral<QuicStreamId>(); 39 sender.SendStreamCancellation(stream_id); 40 break; 41 } 42 case 3: { 43 sender.Flush(); 44 break; 45 } 46 } 47 } 48 49 sender.Flush(); 50 return 0; 51 } 52 53 } // namespace test 54 } // namespace quic 55