Skip to content

Commit cd97059

Browse files
fniksiccopybara-github
authored andcommitted
Use the bug ID from crashing input filename when registering reproducer tests.
PiperOrigin-RevId: 828517947
1 parent 7406afb commit cd97059

File tree

7 files changed

+33
-5
lines changed

7 files changed

+33
-5
lines changed

e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/crashing1 renamed to e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnCrashingInput/crashing/crashing1-crash_sig-input_sig

File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FUZZTESTv1
2+
sub {
3+
s: "crashing input, but file name has invalid format"
4+
}

e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/crashing1 renamed to e2e_tests/testdata/corpus_database/fuzz_tests_for_functional_testing.stripped/MySuite.CrashOnFailingTestInput/crashing/crashing1-crash_sig-input_sig

File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FUZZTESTv1
2+
sub {
3+
s: "crashing input, but file name has invalid format"
4+
}

fuzztest/internal/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,12 @@ cc_library(
225225
":io",
226226
":registry",
227227
":runtime",
228+
"@abseil-cpp//absl/status:statusor",
228229
"@abseil-cpp//absl/strings",
229230
"@abseil-cpp//absl/strings:str_format",
230231
"@abseil-cpp//absl/strings:string_view",
232+
"@com_google_fuzztest//common:crashing_input_filename",
233+
"@com_google_fuzztest//common:logging",
231234
"@googletest//:gtest",
232235
] + select({
233236
"@com_google_fuzztest//fuzztest:use_centipede": [":centipede_adaptor"],

fuzztest/internal/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,13 @@ fuzztest_cc_library(
188188
fuzztest::io
189189
fuzztest::registry
190190
fuzztest::runtime
191+
GTest::gtest
192+
absl::statusor
191193
absl::strings
192194
absl::str_format
193195
absl::string_view
194-
GTest::gtest
196+
fuzztest::crashing_input_filename
197+
fuzztest::common_logging
195198
)
196199

197200
fuzztest_cc_library(

fuzztest/internal/googletest_adaptor.cc

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@
33

44
#include <cstdlib>
55
#include <string>
6+
#include <string_view>
67
#include <type_traits>
78
#include <utility>
89
#include <vector>
910

1011
#include "gtest/gtest.h"
12+
#include "absl/status/statusor.h"
1113
#include "absl/strings/str_cat.h"
1214
#include "absl/strings/str_format.h"
1315
#include "absl/strings/string_view.h"
16+
#include "./common/crashing_input_filename.h"
17+
#include "./common/logging.h"
1418
#include "./fuzztest/internal/configuration.h"
1519
#include "./fuzztest/internal/corpus_database.h"
1620
#include "./fuzztest/internal/flag_name.h"
@@ -63,18 +67,28 @@ void RegisterSeparateRegressionTestForEachCrashingInput(
6367
const Configuration& configuration) {
6468
if (!configuration.reproduce_findings_as_separate_tests) return;
6569
#ifdef FUZZTEST_USE_CENTIPEDE
66-
const auto crash_inputs =
70+
const std::vector<std::string> crash_inputs =
6771
ListCrashIdsUsingCentipede(configuration, test.full_name());
6872
#else
6973
CorpusDatabase corpus_database(configuration);
70-
const auto crash_inputs =
74+
const std::vector<std::string> crash_inputs =
7175
corpus_database.GetCrashingInputsIfAny(test.full_name());
7276
#endif
7377
for (const std::string& input : crash_inputs) {
7478
Configuration updated_configuration = configuration;
7579
updated_configuration.crashing_input_to_reproduce = input;
76-
const std::string suffix =
77-
absl::StrCat("/Regression/", std::string(Basename(input)));
80+
absl::string_view file_name = Basename(input);
81+
const absl::StatusOr<InputFileComponents> components =
82+
ParseCrashingInputFilename(
83+
std::string_view{file_name.data(), file_name.size()});
84+
if (!components.ok()) {
85+
FUZZTEST_LOG(WARNING)
86+
<< "Failed to parse crashing input filename " << file_name
87+
<< ". Not registering a regression test for it. Status: "
88+
<< components.status();
89+
continue;
90+
}
91+
const std::string suffix = absl::StrCat("/Regression/", components->bug_id);
7892
RegisterFuzzTestAsGTest<T>(argc, argv, test, updated_configuration, suffix);
7993
}
8094
}

0 commit comments

Comments
 (0)