Use the bug ID from crashing input filename when registering reproducer tests. PiperOrigin-RevId: 828517947
diff --git a/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/crashing1 b/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/crashing1-crash_sig-input_sig similarity index 100% rename from e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/crashing1 rename to e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/crashing1-crash_sig-input_sig
diff --git a/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/invalid-format b/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/invalid-format new file mode 100644 index 0000000..076d9e5 --- /dev/null +++ b/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/invalid-format
@@ -0,0 +1,4 @@ +FUZZTESTv1 +sub { + s: "crashing input, but file name has invalid format" +}
diff --git a/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/crashing1 b/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/crashing1-crash_sig-input_sig similarity index 100% rename from e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/crashing1 rename to e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/crashing1-crash_sig-input_sig
diff --git a/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/invalid-format b/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/invalid-format new file mode 100644 index 0000000..076d9e5 --- /dev/null +++ b/e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/invalid-format
@@ -0,0 +1,4 @@ +FUZZTESTv1 +sub { + s: "crashing input, but file name has invalid format" +}
diff --git a/fuzztest/internal/BUILD b/fuzztest/internal/BUILD index ef0db10..1a3de14 100644 --- a/fuzztest/internal/BUILD +++ b/fuzztest/internal/BUILD
@@ -225,9 +225,12 @@ ":io", ":registry", ":runtime", + "@abseil-cpp//absl/status:statusor", "@abseil-cpp//absl/strings", "@abseil-cpp//absl/strings:str_format", "@abseil-cpp//absl/strings:string_view", + "@com_google_fuzztest//common:crashing_input_filename", + "@com_google_fuzztest//common:logging", "@googletest//:gtest", ] + select({ "@com_google_fuzztest//fuzztest:use_centipede": [":centipede_adaptor"],
diff --git a/fuzztest/internal/CMakeLists.txt b/fuzztest/internal/CMakeLists.txt index 667a695..5d01571 100644 --- a/fuzztest/internal/CMakeLists.txt +++ b/fuzztest/internal/CMakeLists.txt
@@ -188,10 +188,13 @@ fuzztest::io fuzztest::registry fuzztest::runtime + GTest::gtest + absl::statusor absl::strings absl::str_format absl::string_view - GTest::gtest + fuzztest::crashing_input_filename + fuzztest::common_logging ) fuzztest_cc_library(
diff --git a/fuzztest/internal/googletest_adaptor.cc b/fuzztest/internal/googletest_adaptor.cc index c989e7a..70ffe85 100644 --- a/fuzztest/internal/googletest_adaptor.cc +++ b/fuzztest/internal/googletest_adaptor.cc
@@ -3,14 +3,18 @@ #include <cstdlib> #include <string> +#include <string_view> #include <type_traits> #include <utility> #include <vector> #include "gtest/gtest.h" +#include "absl/status/statusor.h" #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" +#include "./common/crashing_input_filename.h" +#include "./common/logging.h" #include "./fuzztest/internal/configuration.h" #include "./fuzztest/internal/corpus_database.h" #include "./fuzztest/internal/flag_name.h" @@ -63,18 +67,28 @@ const Configuration& configuration) { if (!configuration.reproduce_findings_as_separate_tests) return; #ifdef FUZZTEST_USE_CENTIPEDE - const auto crash_inputs = + const std::vector<std::string> crash_inputs = ListCrashIdsUsingCentipede(configuration, test.full_name()); #else CorpusDatabase corpus_database(configuration); - const auto crash_inputs = + const std::vector<std::string> crash_inputs = corpus_database.GetCrashingInputsIfAny(test.full_name()); #endif for (const std::string& input : crash_inputs) { Configuration updated_configuration = configuration; updated_configuration.crashing_input_to_reproduce = input; - const std::string suffix = - absl::StrCat("/Regression/", std::string(Basename(input))); + absl::string_view file_name = Basename(input); + const absl::StatusOr<InputFileComponents> components = + ParseCrashingInputFilename( + std::string_view{file_name.data(), file_name.size()}); + if (!components.ok()) { + FUZZTEST_LOG(WARNING) + << "Failed to parse crashing input filename " << file_name + << ". Not registering a regression test for it. Status: " + << components.status(); + continue; + } + const std::string suffix = absl::StrCat("/Regression/", components->bug_id); RegisterFuzzTestAsGTest<T>(argc, argv, test, updated_configuration, suffix); } }