From 8fec74688c0a3610162850bfeecc0a3901630cf6 Mon Sep 17 00:00:00 2001 From: Daniel Lowengrub Date: Thu, 14 May 2026 09:27:08 -0700 Subject: [PATCH] Fix the validation of `Arbitrary`. PiperOrigin-RevId: 915468584 --- domain_tests/BUILD | 2 ++ domain_tests/CMakeLists.txt | 2 ++ domain_tests/string_domains_test.cc | 18 ++++++++++++++++++ fuzztest/internal/domains/arbitrary_impl.h | 8 ++++---- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/domain_tests/BUILD b/domain_tests/BUILD index 8d8d25194..ea40cd7ee 100644 --- a/domain_tests/BUILD +++ b/domain_tests/BUILD @@ -281,8 +281,10 @@ cc_test( ":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 6eac1535a..da7ef0f2f 100644 --- a/domain_tests/CMakeLists.txt +++ b/domain_tests/CMakeLists.txt @@ -275,6 +275,8 @@ fuzztest_cc_test( 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 0ad090647..c615e17a1 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 @@ TEST(Domain, AsciiStringUsesDictionary) { EXPECT_THAT(mutants, Contains(HasSubstr("1234"))); } +TEST(StringViewTest, ValidationFailsWhenExceedingDefaultMaxSize) { + auto domain = Arbitrary(); + + // Value larger than default max size should be invalid. + std::vector invalid_corpus(internal::kDefaultContainerMaxSize + 1, 'a'); + EXPECT_FALSE(domain.ValidateCorpusValue(invalid_corpus).ok()); +} + +TEST(AbslStringViewTest, ValidationFailsWhenExceedingDefaultMaxSize) { + auto domain = Arbitrary(); + + // Value larger than default max size should be invalid. + std::vector 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 d31c31bf7..f5717cf60 100644 --- a/fuzztest/internal/domains/arbitrary_impl.h +++ b/fuzztest/internal/domains/arbitrary_impl.h @@ -364,8 +364,8 @@ class ArbitraryImpl> 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 @@ class ArbitraryImpl 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: