Fix the validation of `Arbitrary<string_view>`. PiperOrigin-RevId: 915468584
diff --git a/domain_tests/BUILD b/domain_tests/BUILD index 8d8d251..ea40cd7 100644 --- a/domain_tests/BUILD +++ b/domain_tests/BUILD
@@ -281,8 +281,10 @@ ":domain_testing", "@abseil-cpp//absl/container:flat_hash_set", "@abseil-cpp//absl/random", + "@abseil-cpp//absl/strings:string_view", "@com_google_fuzztest//fuzztest:domain_core", "@com_google_fuzztest//fuzztest/internal:table_of_recent_compares", + "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl", "@googletest//:gtest_main", ], )
diff --git a/domain_tests/CMakeLists.txt b/domain_tests/CMakeLists.txt index 6eac153..da7ef0f 100644 --- a/domain_tests/CMakeLists.txt +++ b/domain_tests/CMakeLists.txt
@@ -275,6 +275,8 @@ fuzztest::domain_testing absl::flat_hash_set absl::random_random + absl::status + absl::strings fuzztest::domain_core fuzztest::table_of_recent_compares GTest::gmock_main
diff --git a/domain_tests/string_domains_test.cc b/domain_tests/string_domains_test.cc index 0ad0906..c615e17 100644 --- a/domain_tests/string_domains_test.cc +++ b/domain_tests/string_domains_test.cc
@@ -26,8 +26,10 @@ #include "gtest/gtest.h" #include "absl/container/flat_hash_set.h" #include "absl/random/random.h" +#include "absl/strings/string_view.h" #include "./fuzztest/domain_core.h" #include "./domain_tests/domain_testing.h" +#include "./fuzztest/internal/domains/container_of_impl.h" #include "./fuzztest/internal/table_of_recent_compares.h" namespace fuzztest { @@ -225,5 +227,21 @@ EXPECT_THAT(mutants, Contains(HasSubstr("1234"))); } +TEST(StringViewTest, ValidationFailsWhenExceedingDefaultMaxSize) { + auto domain = Arbitrary<std::string_view>(); + + // Value larger than default max size should be invalid. + std::vector<char> invalid_corpus(internal::kDefaultContainerMaxSize + 1, 'a'); + EXPECT_FALSE(domain.ValidateCorpusValue(invalid_corpus).ok()); +} + +TEST(AbslStringViewTest, ValidationFailsWhenExceedingDefaultMaxSize) { + auto domain = Arbitrary<absl::string_view>(); + + // Value larger than default max size should be invalid. + std::vector<char> invalid_corpus(internal::kDefaultContainerMaxSize + 1, 'a'); + EXPECT_FALSE(domain.ValidateCorpusValue(invalid_corpus).ok()); +} + } // namespace } // namespace fuzztest
diff --git a/fuzztest/internal/domains/arbitrary_impl.h b/fuzztest/internal/domains/arbitrary_impl.h index d31c31b..f5717cf 100644 --- a/fuzztest/internal/domains/arbitrary_impl.h +++ b/fuzztest/internal/domains/arbitrary_impl.h
@@ -364,8 +364,8 @@ return IRObject::FromCorpus(v); } - absl::Status ValidateCorpusValue(const corpus_type&) const { - return absl::OkStatus(); // Nothing to validate. + absl::Status ValidateCorpusValue(const corpus_type& val) const { + return inner_.ValidateCorpusValue(val); } private: @@ -423,8 +423,8 @@ return IRObject::FromCorpus(v); } - absl::Status ValidateCorpusValue(const corpus_type&) const { - return absl::OkStatus(); // Nothing to validate. + absl::Status ValidateCorpusValue(const corpus_type& val) const { + return inner_.ValidateCorpusValue(val); } private: