diff --git a/centipede/centipede_interface.cc b/centipede/centipede_interface.cc index 90311692..c47d3a9c 100644 --- a/centipede/centipede_interface.cc +++ b/centipede/centipede_interface.cc @@ -659,6 +659,7 @@ int UpdateCorpusDatabaseForFuzzTests( int ListCrashIds(const Environment& env, const fuzztest::internal::Configuration& target_config) { + fprintf(stderr, "[DEBUG_CENTIPEDE] ListCrashIds called!\n"); FUZZTEST_CHECK(!env.list_crash_ids_file.empty()) << "Need list_crash_ids_file to be set for listing crash IDs"; FUZZTEST_CHECK_EQ(target_config.fuzz_tests_in_current_shard.size(), 1); @@ -668,12 +669,22 @@ int ListCrashIds(const Environment& env, target_config.binary_identifier / target_config.fuzz_tests_in_current_shard[0] / "crashing"; + fprintf(stderr, "[DEBUG_CENTIPEDE] crash_dir: '%s'\n", crash_dir.c_str()); + fprintf(stderr, "[DEBUG_CENTIPEDE] RemotePathExists(crash_dir): %d\n", + RemotePathExists(crash_dir.string())); if (RemotePathExists(crash_dir.string())) { + fprintf(stderr, "[DEBUG_CENTIPEDE] RemotePathIsDirectory(crash_dir): %d\n", + RemotePathIsDirectory(crash_dir.string())); FUZZTEST_CHECK(RemotePathIsDirectory(crash_dir.string())) << "Crash dir " << crash_dir << " in the corpus database " << target_config.corpus_database << " is not a directory"; crash_paths = ValueOrDie(RemoteListFiles(crash_dir.string(), /*recursively=*/false)); + fprintf(stderr, "[DEBUG_CENTIPEDE] RemoteListFiles found %zu paths\n", + crash_paths.size()); + for (const auto& path : crash_paths) { + fprintf(stderr, " [DEBUG_CENTIPEDE] path: '%s'\n", path.c_str()); + } } std::vector results; results.reserve(crash_paths.size()); @@ -681,6 +692,8 @@ int ListCrashIds(const Environment& env, std::string crash_id = std::filesystem::path{crash_path}.filename(); results.push_back(std::move(crash_id)); } + fprintf(stderr, "[DEBUG_CENTIPEDE] writing %zu results to %s\n", + results.size(), env.list_crash_ids_file.c_str()); FUZZTEST_CHECK_OK(RemoteFileSetContents(env.list_crash_ids_file, absl::StrJoin(results, "\n"))); return EXIT_SUCCESS; diff --git a/fuzztest/internal/corpus_database.cc b/fuzztest/internal/corpus_database.cc index d8221d10..67da20bc 100644 --- a/fuzztest/internal/corpus_database.cc +++ b/fuzztest/internal/corpus_database.cc @@ -14,6 +14,7 @@ #include "./fuzztest/internal/corpus_database.h" +#include #include #include @@ -28,9 +29,23 @@ namespace { std::vector GetInputs( absl::string_view corpus_path_for_test_binary, absl::string_view test_name, absl::string_view subdir) { - if (corpus_path_for_test_binary.empty()) return {}; - return ListDirectory( - absl::StrCat(corpus_path_for_test_binary, "/", test_name, "/", subdir)); + if (corpus_path_for_test_binary.empty()) { + fprintf( + stderr, + "[DEBUG_CORPUS] GetInputs: corpus_path_for_test_binary is empty!\n"); + return {}; + } + std::string path = + absl::StrCat(corpus_path_for_test_binary, "/", test_name, "/", subdir); + fprintf(stderr, "[DEBUG_CORPUS] GetInputs: listing directory path: '%s'\n", + path.c_str()); + auto results = ListDirectory(path); + fprintf(stderr, "[DEBUG_CORPUS] GetInputs: found %zu files in '%s'\n", + results.size(), path.c_str()); + for (const auto& file : results) { + fprintf(stderr, " [DEBUG_CORPUS] file: '%s'\n", file.c_str()); + } + return results; } } // namespace diff --git a/fuzztest/internal/googletest_adaptor.cc b/fuzztest/internal/googletest_adaptor.cc index d36d4986..5698e893 100644 --- a/fuzztest/internal/googletest_adaptor.cc +++ b/fuzztest/internal/googletest_adaptor.cc @@ -71,20 +71,33 @@ void RegisterFuzzTestAsGTest(int* argc, char*** argv, FuzzTest& test, nullptr, test.file().c_str(), test.line(), std::move(fixture_factory)); } +#include + template void RegisterSeparateRegressionTestForEachCrashingInput( int* argc, char*** argv, FuzzTest& test, const Configuration& configuration) { + fprintf(stderr, + "[DEBUG_ADAPTOR] RegisterSeparateRegressionTestForEachCrashingInput " + "for test '%s'\n", + test.full_name().c_str()); + fprintf(stderr, "[DEBUG_ADAPTOR] reproduce_findings_as_separate_tests: %d\n", + configuration.reproduce_findings_as_separate_tests); if (!configuration.reproduce_findings_as_separate_tests) return; #ifdef FUZZTEST_USE_CENTIPEDE + fprintf(stderr, "[DEBUG_ADAPTOR] FUZZTEST_USE_CENTIPEDE is defined\n"); const std::vector crash_inputs = ListCrashIdsUsingCentipede(configuration, test.full_name()); #else + fprintf(stderr, "[DEBUG_ADAPTOR] FUZZTEST_USE_CENTIPEDE is NOT defined\n"); CorpusDatabase corpus_database(configuration); const std::vector crash_inputs = corpus_database.GetCrashingInputsIfAny(test.full_name()); #endif + fprintf(stderr, "[DEBUG_ADAPTOR] found %zu crash inputs\n", + crash_inputs.size()); for (const std::string& input : crash_inputs) { + fprintf(stderr, " [DEBUG_ADAPTOR] crash input: '%s'\n", input.c_str()); Configuration updated_configuration = configuration; updated_configuration.crashing_input_to_reproduce = input; RegisterFuzzTestAsGTest(argc, argv, test, updated_configuration, input);