blob: eb7164554201f5738bfccc3fe902135bcd4998d2 [file] [log] [blame]
// Copyright 2023 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 "quiche/common/btree_scheduler.h"
#include "quiche/common/quiche_data_reader.h"
namespace {
uint8_t ReadUint8(quiche::QuicheDataReader& reader) {
uint8_t result;
if (!reader.ReadUInt8(&result)) {
exit(0);
}
return result;
}
} // namespace
// Simple fuzzer that attempts to drive the scheduler into an invalid state that
// would cause a QUICHE_BUG or a crash.
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data_ptr, size_t size) {
quiche::BTreeScheduler<uint8_t, uint8_t> scheduler;
quiche::QuicheDataReader reader(reinterpret_cast<const char*>(data_ptr),
size);
while (!reader.IsDoneReading()) {
switch (ReadUint8(reader)) {
case 0:
(void)scheduler.Register(ReadUint8(reader), ReadUint8(reader));
break;
case 1:
(void)scheduler.Unregister(ReadUint8(reader));
break;
case 2:
(void)scheduler.UpdatePriority(ReadUint8(reader), ReadUint8(reader));
break;
case 3:
(void)scheduler.Schedule(ReadUint8(reader));
break;
case 4:
(void)scheduler.PopFront();
break;
default:
return 0;
}
}
return 0;
}