diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cd18cb4..cf6297a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -596,6 +596,10 @@ if(WITH_LIBDWARFS AND WITH_FUZZ) add_executable(fuzz_mkdwarfs test/fuzz_mkdwarfs.cpp) target_link_libraries(fuzz_mkdwarfs PRIVATE mkdwarfs_main dwarfs_test_helpers) list(APPEND BINARY_TARGETS fuzz_mkdwarfs) + + add_executable(fuzz_reader test/fuzz_reader.cpp) + target_link_libraries(fuzz_reader PRIVATE dwarfs_reader) + list(APPEND BINARY_TARGETS fuzz_reader) endif() foreach(tgt ${LIBDWARFS_TARGETS}) diff --git a/test/fuzz_reader.cpp b/test/fuzz_reader.cpp new file mode 100644 index 00000000..f3d77eea --- /dev/null +++ b/test/fuzz_reader.cpp @@ -0,0 +1,57 @@ +/* vim:set ts=2 sw=2 sts=2 et: */ +/** + * \author Marcus Holland-Moritz (github@mhxnet.de) + * \copyright Copyright (c) Marcus Holland-Moritz + * + * This file is part of dwarfs. + * + * dwarfs is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * dwarfs is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with dwarfs. If not, see . + */ + +#include +#include + +#include +#include +#include +#include +#include + +using namespace dwarfs; + +int main(int argc, char** argv) { + if (argc < 2) { + return 1; + } + + // stream_logger lgr(std::cerr); + null_logger lgr; + os_access_generic os; + +#ifdef __AFL_LOOP + while (__AFL_LOOP(10000)) +#endif + { + try { + std::ostringstream oss; + reader::filesystem_v2 fs(lgr, os, argv[1], + {.metadata = {.check_consistency = true}}); + fs.dump(oss, {.features = reader::fsinfo_features::all()}); + } catch (std::exception const& e [[maybe_unused]]) { + // std::cerr << "Exception: " << e.what() << "\n"; + } + } + + return 0; +}