From 91de60d91280b71a8c9af5307ec271784ece9376 Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Sat, 30 Oct 2021 12:05:13 +0000 Subject: [PATCH] Lagom/Fuzzers: Add fuzzer for PDF document --- Meta/Lagom/CMakeLists.txt | 7 +++++++ Meta/Lagom/Fuzzers/CMakeLists.txt | 1 + Meta/Lagom/Fuzzers/FuzzPDF.cpp | 23 +++++++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 Meta/Lagom/Fuzzers/FuzzPDF.cpp diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index c86da94434..823ec6147d 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -352,6 +352,13 @@ if (BUILD_LAGOM) LIBS LagomJS ) + # PDF + file(GLOB LIBPDF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibPDF/*.cpp") + lagom_lib(PDF pdf + SOURCES ${LIBPDF_SOURCES} + LIBS LagomGfx LagomIPC LagomTextCodec + ) + # Regex file(GLOB LIBREGEX_LIBC_SOURCES "../../Userland/Libraries/LibRegex/C/Regex.cpp") file(GLOB LIBREGEX_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibRegex/*.cpp") diff --git a/Meta/Lagom/Fuzzers/CMakeLists.txt b/Meta/Lagom/Fuzzers/CMakeLists.txt index ffd286a893..96430496ce 100644 --- a/Meta/Lagom/Fuzzers/CMakeLists.txt +++ b/Meta/Lagom/Fuzzers/CMakeLists.txt @@ -33,6 +33,7 @@ add_simple_fuzzer(FuzzPNGLoader LagomGfx) add_simple_fuzzer(FuzzPBMLoader LagomGfx) add_simple_fuzzer(FuzzPGMLoader LagomGfx) add_simple_fuzzer(FuzzPPMLoader LagomGfx) +add_simple_fuzzer(FuzzPDF LagomPDF) add_simple_fuzzer(FuzzQuotedPrintableParser LagomIMAP) add_simple_fuzzer(FuzzHebrewDecoder LagomTextCodec) add_simple_fuzzer(FuzzHttpRequest LagomHTTP) diff --git a/Meta/Lagom/Fuzzers/FuzzPDF.cpp b/Meta/Lagom/Fuzzers/FuzzPDF.cpp new file mode 100644 index 0000000000..733fcb7e5c --- /dev/null +++ b/Meta/Lagom/Fuzzers/FuzzPDF.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +{ + ReadonlyBytes bytes { data, size }; + auto doc = PDF::Document::create(bytes); + + if (doc) { + auto pages = doc->get_page_count(); + for (size_t i = 0; i < pages; ++i) { + (void)doc->get_page(i); + } + } + + return 0; +}