Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions centipede/centipede_interface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -668,19 +669,31 @@ 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<std::string> results;
results.reserve(crash_paths.size());
for (const auto& crash_path : crash_paths) {
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;
Expand Down
21 changes: 18 additions & 3 deletions fuzztest/internal/corpus_database.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include "./fuzztest/internal/corpus_database.h"

#include <cstdio>
#include <string>
#include <vector>

Expand All @@ -28,9 +29,23 @@ namespace {
std::vector<std::string> 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
Expand Down
13 changes: 13 additions & 0 deletions fuzztest/internal/googletest_adaptor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,33 @@ void RegisterFuzzTestAsGTest(int* argc, char*** argv, FuzzTest& test,
nullptr, test.file().c_str(), test.line(), std::move(fixture_factory));
}

#include <cstdio>

template <typename T>
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<std::string> 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<std::string> 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<T>(argc, argv, test, updated_configuration, input);
Expand Down
Loading