diff --git a/Meta/Lagom/Fuzzers/CMakeLists.txt b/Meta/Lagom/Fuzzers/CMakeLists.txt index 2183d3504f..8901747dfd 100644 --- a/Meta/Lagom/Fuzzers/CMakeLists.txt +++ b/Meta/Lagom/Fuzzers/CMakeLists.txt @@ -45,6 +45,7 @@ add_simple_fuzzer(FuzzPGMLoader LibGfx) add_simple_fuzzer(FuzzPoly1305 LibCrypto) add_simple_fuzzer(FuzzPPMLoader LibGfx) add_simple_fuzzer(FuzzPDF LibPDF) +add_simple_fuzzer(FuzzQOALoader LibAudio) add_simple_fuzzer(FuzzQOILoader LibGfx) add_simple_fuzzer(FuzzTGALoader LibGfx) add_simple_fuzzer(FuzzQuotedPrintableParser LibIMAP) diff --git a/Meta/Lagom/Fuzzers/FuzzQOALoader.cpp b/Meta/Lagom/Fuzzers/FuzzQOALoader.cpp new file mode 100644 index 0000000000..9202cd32a7 --- /dev/null +++ b/Meta/Lagom/Fuzzers/FuzzQOALoader.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023, kleines Filmröllchen + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size) +{ + auto qoa_data = ByteBuffer::copy(data, size).release_value(); + auto qoa_or_error = Audio::QOALoaderPlugin::create(qoa_data.bytes()); + + if (qoa_or_error.is_error()) + return 0; + + auto qoa = qoa_or_error.release_value(); + + for (;;) { + auto samples = qoa->get_more_samples(); + if (samples.is_error()) + return 0; + if (samples.value().size() > 0) + break; + } + + return 0; +}