Merge bitcoin/bitcoin#21874: fuzz: Add WRITE_ALL_FUZZ_TARGETS_AND_ABORT

fa5cb6b268554fe0f272833794a98106872ac6a5 fuzz: Add WRITE_ALL_FUZZ_TARGETS_AND_ABORT (MarcoFalke)

Pull request description:

  This is needed when stdout is polluted by the fuzz engine. stderr can't be used instead because it is polluted by aborting the program.

Top commit has no ACKs.

Tree-SHA512: bf0a2a6bcd964ff1f0f3ef6e7e297b4c780430c4d6312332ed99ace0e1c58243c1483fd387e39405837d39b36072dfeb9ae03d2a7aa728ad6955159754fd5766
This commit is contained in:
MarcoFalke 2021-05-07 15:44:16 +02:00 committed by Konstantin Akimov
parent a02a2c0322
commit 51633d70ea
No known key found for this signature in database
GPG Key ID: 2176C4A5D01EA524

View File

@ -46,13 +46,24 @@ void initialize()
return WrappedGetAddrInfo(name, false); return WrappedGetAddrInfo(name, false);
}; };
bool should_abort{false};
if (std::getenv("PRINT_ALL_FUZZ_TARGETS_AND_ABORT")) { if (std::getenv("PRINT_ALL_FUZZ_TARGETS_AND_ABORT")) {
for (const auto& t : FuzzTargets()) { for (const auto& t : FuzzTargets()) {
if (std::get<2>(t.second)) continue; if (std::get<2>(t.second)) continue;
std::cout << t.first << std::endl; std::cout << t.first << std::endl;
} }
Assert(false); should_abort = true;
} }
if (const char* out_path = std::getenv("WRITE_ALL_FUZZ_TARGETS_AND_ABORT")) {
std::cout << "Writing all fuzz target names to '" << out_path << "'." << std::endl;
std::ofstream out_stream(out_path, std::ios::binary);
for (const auto& t : FuzzTargets()) {
if (std::get<2>(t.second)) continue;
out_stream << t.first << std::endl;
}
should_abort = true;
}
Assert(!should_abort);
std::string_view fuzz_target{Assert(std::getenv("FUZZ"))}; std::string_view fuzz_target{Assert(std::getenv("FUZZ"))};
const auto it = FuzzTargets().find(fuzz_target); const auto it = FuzzTargets().find(fuzz_target);
Assert(it != FuzzTargets().end()); Assert(it != FuzzTargets().end());