From ccaaf928e7555e3e32e27511fe646849028421b7 Mon Sep 17 00:00:00 2001 From: John Doe Date: Wed, 17 Sep 2025 23:02:31 +0300 Subject: [PATCH 1/6] re2 private headers issue --- CHANGES.md | 61 ++++ cmake/BuildDependencies.cmake | 22 +- fuzztest/CMakeLists.txt | 388 ++++++++++++----------- fuzztest/internal/domains/CMakeLists.txt | 73 +++-- 4 files changed, 329 insertions(+), 215 deletions(-) create mode 100644 CHANGES.md diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 000000000..d75ac3a9f --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,61 @@ +# Issue with Private RE2 Headers in FuzzTest + +## Problem + +The FuzzTest library uses **RE2** for regular expressions. +In FuzzTest, the module `regexp_dfa.cc` directly includes **private RE2 headers**: + +```cpp +#include "re2/prog.h" +``` + +These headers are not exported when RE2 is installed via CMake (make install) or from system packages. +As a result: +- Building with system RE2 (-DFUZZTEST_USE_SYSTEM_RE2=ON) fails: + +```angular2html +fatal error: 're2/prog.h' file not found +``` +- The problem occurs only for regexp_dfa and modules depending on it. + +RE2 separates headers into: +Public headers (re2/re2.h, re2/set.h, re2/filtered_re2.h) — available after install and in system packages. +Private headers (re2/prog.h, etc.) — only present in source tree, not exported via CMake install. +FuzzTest directly uses private headers, making system RE2 incompatible without build modifications. + +## Solution + +- Conditionally build: +```angular2html +option(FUZZTEST_BUILD_REGEXP_DFA "Build regexp_dfa (needs private RE2 headers)" ON) +``` + +- Disable regexp_dfa when using external RE2: +```angular2html +if(FUZZTEST_USE_SYSTEM_RE2) +... + set(FUZZTEST_BUILD_REGEXP_DFA OFF CACHE BOOL "" FORCE) +... +``` + +- Conditional dependencies added to libraries that depend on regexp_dfa: +```angular2html +if(FUZZTEST_BUILD_REGEXP_DFA) + set(EXTRA_REGEXP_DFA_DEPS fuzztest::regexp_dfa) +else() + set(EXTRA_REGEXP_DFA_DEPS "") +endif() +``` + +With that: +1. With system RE2, regexp_dfa is skipped; FuzzTest builds successfully. +2. With FetchContent(RE2) (source), private headers are available; regexp_dfa is built. + +## Outcome + +Eliminated the fatal error: ```'re2/prog.h' file not found ``` issue when using system RE2. +FuzzTest builds correctly in both scenarios: +1. System RE2 without private headers +2. RE2 from source with private headers + +Trying rewriting the regexp_dfa via using only public set/re2 API is impossible - there simply are no such tools (I tried). diff --git a/cmake/BuildDependencies.cmake b/cmake/BuildDependencies.cmake index d8565c015..d3bb870f2 100644 --- a/cmake/BuildDependencies.cmake +++ b/cmake/BuildDependencies.cmake @@ -19,8 +19,17 @@ include(FetchContent) set(absl_URL https://github.com/abseil/abseil-cpp.git) set(absl_TAG d04b964d82ed5146f7e5e34701a5ba69f9514c9a) -set(re2_URL https://github.com/google/re2.git) -set(re2_TAG 2024-07-02) + +if(FUZZTEST_USE_SYSTEM_RE2) + find_package(re2 REQUIRED) + set(FUZZTEST_BUILD_REGEXP_DFA OFF CACHE BOOL + "Build regexp_dfa (needs private RE2 headers)" FORCE) + message(WARNING "System RE2 detected: regexp_dfa will NOT be built") +else() + set(FUZZTEST_BUILD_REGEXP_DFA ON CACHE BOOL + "Build regexp_dfa (needs private RE2 headers)" FORCE) +endif() + set(gtest_URL https://github.com/google/googletest.git) set(gtest_TAG v1.16.0) @@ -49,12 +58,6 @@ FetchContent_Declare( GIT_TAG ${absl_TAG} ) -FetchContent_Declare( - re2 - GIT_REPOSITORY ${re2_URL} - GIT_TAG ${re2_TAG} -) - FetchContent_Declare( googletest GIT_REPOSITORY ${gtest_URL} @@ -95,9 +98,6 @@ set(ABSL_PROPAGATE_CXX_STD ON) set(ABSL_ENABLE_INSTALL ON) FetchContent_MakeAvailable(abseil-cpp) -set(RE2_BUILD_TESTING OFF) -FetchContent_MakeAvailable(re2) - set(GTEST_HAS_ABSL ON) FetchContent_MakeAvailable(googletest) diff --git a/fuzztest/CMakeLists.txt b/fuzztest/CMakeLists.txt index d5aaedb46..b465a86ac 100644 --- a/fuzztest/CMakeLists.txt +++ b/fuzztest/CMakeLists.txt @@ -13,224 +13,246 @@ # limitations under the License. if (NOT COMPILER_GCC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0") -endif() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0") +endif () fuzztest_cc_library( - NAME - domain - HDRS - "domain.h" - DEPS - fuzztest::domain_core - fuzztest::domains_impl - fuzztest::in_regexp_impl - fuzztest::protobuf_domain_impl + NAME + domain + HDRS + "domain.h" + DEPS + fuzztest::domain_core + fuzztest::domains_impl + fuzztest::in_regexp_impl + fuzztest::protobuf_domain_impl ) fuzztest_cc_library( - NAME - domain_core - HDRS - "domain_core.h" - DEPS - absl::flat_hash_map - absl::random_bit_gen_ref - absl::status - absl::statusor - absl::string_view - absl::span - fuzztest::common_logging - fuzztest::any - fuzztest::logging - fuzztest::meta - fuzztest::printer - fuzztest::serialization - fuzztest::type_support - fuzztest::core_domains_impl - fuzztest::utf + NAME + domain_core + HDRS + "domain_core.h" + DEPS + absl::flat_hash_map + absl::random_bit_gen_ref + absl::status + absl::statusor + absl::string_view + absl::span + fuzztest::common_logging + fuzztest::any + fuzztest::logging + fuzztest::meta + fuzztest::printer + fuzztest::serialization + fuzztest::type_support + fuzztest::core_domains_impl + fuzztest::utf ) fuzztest_cc_library( - NAME - fuzzing_bit_gen - HDRS - "fuzzing_bit_gen.h" - SRCS - "fuzzing_bit_gen.cc" - DEPS - absl::fast_type_id - absl::no_destructor - absl::flat_hash_map - absl::bits - absl::int128 - absl::random_bit_gen_ref - absl::span - fuzztest::register_fuzzing_mocks + NAME + fuzzing_bit_gen + HDRS + "fuzzing_bit_gen.h" + SRCS + "fuzzing_bit_gen.cc" + DEPS + absl::fast_type_id + absl::no_destructor + absl::flat_hash_map + absl::bits + absl::int128 + absl::random_bit_gen_ref + absl::span + fuzztest::register_fuzzing_mocks ) fuzztest_cc_library( - NAME - fuzztest - HDRS - "fuzztest.h" - DEPS - fuzztest::domain - fuzztest::fuzztest_macros + NAME + fuzztest + HDRS + "fuzztest.h" + DEPS + fuzztest::domain + fuzztest::fuzztest_macros ) fuzztest_cc_library( - NAME - fuzztest_core - HDRS - "fuzztest_core.h" - DEPS - fuzztest::domain_core - fuzztest::fuzztest_macros + NAME + fuzztest_core + HDRS + "fuzztest_core.h" + DEPS + fuzztest::domain_core + fuzztest::fuzztest_macros ) if (FUZZTEST_BUILD_FLATBUFFERS) - fuzztest_cc_library( - NAME - flatbuffers - HDRS - "flatbuffers.h" - "internal/domains/flatbuffers_domain_impl.h" - SRCS - "internal/domains/flatbuffers_domain_impl.cc" - DEPS - absl::algorithm_container - absl::core_headers - absl::flat_hash_map - absl::flat_hash_set - absl::nullability - absl::random_bit_gen_ref - absl::random_distributions - absl::random_random - absl::status - absl::statusor - absl::str_format - absl::strings - absl::synchronization - flatbuffers - fuzztest::any - fuzztest::domain_core - fuzztest::logging - fuzztest::meta - fuzztest::serialization - fuzztest::status - fuzztest::type_support - ) -endif() + fuzztest_cc_library( + NAME + flatbuffers + HDRS + "flatbuffers.h" + "internal/domains/flatbuffers_domain_impl.h" + SRCS + "internal/domains/flatbuffers_domain_impl.cc" + DEPS + absl::algorithm_container + absl::core_headers + absl::flat_hash_map + absl::flat_hash_set + absl::nullability + absl::random_bit_gen_ref + absl::random_distributions + absl::random_random + absl::status + absl::statusor + absl::str_format + absl::strings + absl::synchronization + flatbuffers + fuzztest::any + fuzztest::domain_core + fuzztest::logging + fuzztest::meta + fuzztest::serialization + fuzztest::status + fuzztest::type_support + ) +endif () fuzztest_cc_library( - NAME - fuzztest_gtest_main - SRCS - "fuzztest_gtest_main.cc" - DEPS - fuzztest::init_fuzztest - GTest::gtest + NAME + fuzztest_gtest_main + SRCS + "fuzztest_gtest_main.cc" + DEPS + fuzztest::init_fuzztest + GTest::gtest ) fuzztest_cc_library( - NAME - fuzztest_macros - HDRS - "fuzztest_macros.h" - SRCS - "fuzztest_macros.cc" - DEPS - absl::status - absl::statusor - absl::strings - absl::string_view - fuzztest::logging - fuzztest::common_logging - fuzztest::registration - fuzztest::registry - fuzztest::runtime + NAME + fuzztest_macros + HDRS + "fuzztest_macros.h" + SRCS + "fuzztest_macros.cc" + DEPS + absl::status + absl::statusor + absl::strings + absl::string_view + fuzztest::logging + fuzztest::common_logging + fuzztest::registration + fuzztest::registry + fuzztest::runtime ) fuzztest_cc_test( - NAME - fuzztest_macros_test - SRCS - "fuzztest_macros_test.cc" - DEPS - fuzztest::fuzztest_macros - absl::status - absl::strings - fuzztest::common_logging - fuzztest::temp_dir - GTest::gmock_main + NAME + fuzztest_macros_test + SRCS + "fuzztest_macros_test.cc" + DEPS + fuzztest::fuzztest_macros + absl::status + absl::strings + fuzztest::common_logging + fuzztest::temp_dir + GTest::gmock_main ) fuzztest_cc_library( - NAME - googletest_fixture_adapter - HDRS - "googletest_fixture_adapter.h" - DEPS - fuzztest::fixture_driver - GTest::gtest + NAME + googletest_fixture_adapter + HDRS + "googletest_fixture_adapter.h" + DEPS + fuzztest::fixture_driver + GTest::gtest ) fuzztest_cc_library( - NAME - init_fuzztest - HDRS - "init_fuzztest.h" - SRCS - "init_fuzztest.cc" - DEPS - absl::algorithm_container - absl::no_destructor - absl::flat_hash_set - absl::flags - absl::flags_parse - absl::flags_reflection - absl::strings - absl::str_format - absl::time - fuzztest::common_logging - fuzztest::configuration - fuzztest::flag_name - fuzztest::googletest_adaptor - fuzztest::io - fuzztest::registry - fuzztest::runtime - GTest::gtest + NAME + init_fuzztest + HDRS + "init_fuzztest.h" + SRCS + "init_fuzztest.cc" + DEPS + absl::algorithm_container + absl::no_destructor + absl::flat_hash_set + absl::flags + absl::flags_parse + absl::flags_reflection + absl::strings + absl::str_format + absl::time + fuzztest::common_logging + fuzztest::configuration + fuzztest::flag_name + fuzztest::googletest_adaptor + fuzztest::io + fuzztest::registry + fuzztest::runtime + GTest::gtest ) fuzztest_cc_library( - NAME - llvm_fuzzer_main - SRCS - "llvm_fuzzer_main.cc" - DEPS - fuzztest::init_fuzztest - absl::flags - absl::flags_parse - GTest::gtest + NAME + llvm_fuzzer_main + SRCS + "llvm_fuzzer_main.cc" + DEPS + fuzztest::init_fuzztest + absl::flags + absl::flags_parse + GTest::gtest ) fuzztest_cc_library( - NAME - llvm_fuzzer_wrapper - SRCS - "llvm_fuzzer_wrapper.cc" - DEPS - fuzztest::fuzztest - fuzztest::fuzztest_macros - absl::core_headers - absl::no_destructor - absl::flags - absl::random_random - absl::random_bit_gen_ref - absl::synchronization - fuzztest::common_logging - fuzztest::io - fuzztest::core_domains_impl + NAME + llvm_fuzzer_wrapper + SRCS + "llvm_fuzzer_wrapper.cc" + DEPS + fuzztest::fuzztest + fuzztest::fuzztest_macros + absl::core_headers + absl::no_destructor + absl::flags + absl::random_random + absl::random_bit_gen_ref + absl::synchronization + fuzztest::common_logging + fuzztest::io + fuzztest::core_domains_impl ) + +if (FUZZTEST_BUILD_REGEXP_DFA) + fuzztest_cc_library( + NAME + regexp_dfa + HDRS + "regexp_dfa.h" + SRCS + "regexp_dfa.cc" + DEPS + absl::flat_hash_map + absl::random_bit_gen_ref + absl::random_distributions + absl::status + absl::statusor + absl::strings + absl::string_view + fuzztest::common_logging + fuzztest::logging + re2::re2 + ) +endif () diff --git a/fuzztest/internal/domains/CMakeLists.txt b/fuzztest/internal/domains/CMakeLists.txt index 6e27f1577..63a084b75 100644 --- a/fuzztest/internal/domains/CMakeLists.txt +++ b/fuzztest/internal/domains/CMakeLists.txt @@ -117,6 +117,12 @@ fuzztest_cc_library( fuzztest::type_support ) +if(FUZZTEST_BUILD_REGEXP_DFA) + set(EXTRA_REGEXP_DFA_DEPS fuzztest::regexp_dfa) +else() + set(EXTRA_REGEXP_DFA_DEPS "") +endif() + fuzztest_cc_library( NAME in_grammar_impl @@ -127,7 +133,7 @@ fuzztest_cc_library( DEPS fuzztest::core_domains_impl fuzztest::in_regexp_impl - fuzztest::regexp_dfa + ${EXTRA_REGEXP_DFA_DEPS} absl::flat_hash_map absl::random_bit_gen_ref absl::random_distributions @@ -150,7 +156,7 @@ fuzztest_cc_library( "in_regexp_impl.cc" DEPS fuzztest::core_domains_impl - fuzztest::regexp_dfa + ${EXTRA_REGEXP_DFA_DEPS} absl::random_bit_gen_ref absl::random_distributions absl::status @@ -192,25 +198,28 @@ fuzztest_cc_library( fuzztest::type_support ) -fuzztest_cc_library( - NAME - regexp_dfa - HDRS - "regexp_dfa.h" - SRCS - "regexp_dfa.cc" - DEPS - absl::flat_hash_map - absl::random_bit_gen_ref - absl::random_distributions - absl::status - absl::statusor - absl::strings - absl::string_view - fuzztest::common_logging - fuzztest::logging - re2::re2 -) +if(FUZZTEST_BUILD_REGEXP_DFA) + fuzztest_cc_library( + NAME + regexp_dfa + HDRS + "regexp_dfa.h" + SRCS + "regexp_dfa.cc" + DEPS + absl::flat_hash_map + absl::random_bit_gen_ref + absl::random_distributions + absl::status + absl::statusor + absl::strings + absl::string_view + fuzztest::common_logging + fuzztest::logging + re2::re2 + ) +endif() + fuzztest_cc_library( NAME @@ -224,3 +233,25 @@ fuzztest_cc_library( DEPS absl::string_view ) + +if(FUZZTEST_BUILD_REGEXP_DFA) + fuzztest_cc_library( + NAME + regexp_dfa + HDRS + "regexp_dfa.h" + SRCS + "regexp_dfa.cc" + DEPS + absl::flat_hash_map + absl::random_bit_gen_ref + absl::random_distributions + absl::status + absl::statusor + absl::strings + absl::string_view + fuzztest::common_logging + fuzztest::logging + re2::re2 + ) +endif() From 30c1061e41405811a4d17d171d16f6bbfe0a2a01 Mon Sep 17 00:00:00 2001 From: John Doe Date: Thu, 18 Sep 2025 15:25:58 +0300 Subject: [PATCH 2/6] fetch content issue --- CMakeLists.txt | 1 + cmake/BuildDependencies.cmake | 158 +++++++++++++---------- fuzztest/CMakeLists.txt | 22 ---- fuzztest/internal/domains/CMakeLists.txt | 53 -------- 4 files changed, 90 insertions(+), 144 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9f71df01..1b16dcdab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ cmake_minimum_required(VERSION 3.19) project(fuzztest) +option(FUZZTEST_DOWNLOAD_DEPENDENCIES "Download dependencies using FetchContent." ON) option(FUZZTEST_BUILD_TESTING "Building the tests." OFF) option(FUZZTEST_BUILD_FLATBUFFERS "Building the flatbuffers support." OFF) option(FUZZTEST_FUZZING_MODE "Building the fuzztest in fuzzing mode." OFF) diff --git a/cmake/BuildDependencies.cmake b/cmake/BuildDependencies.cmake index d3bb870f2..f40349305 100644 --- a/cmake/BuildDependencies.cmake +++ b/cmake/BuildDependencies.cmake @@ -16,105 +16,125 @@ cmake_minimum_required(VERSION 3.19) include(FetchContent) -set(absl_URL https://github.com/abseil/abseil-cpp.git) -set(absl_TAG d04b964d82ed5146f7e5e34701a5ba69f9514c9a) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + set(absl_URL https://github.com/abseil/abseil-cpp.git) + set(absl_TAG d04b964d82ed5146f7e5e34701a5ba69f9514c9a) + set(re2_URL https://github.com/google/re2.git) + set(re2_TAG 2024-07-02) -if(FUZZTEST_USE_SYSTEM_RE2) - find_package(re2 REQUIRED) - set(FUZZTEST_BUILD_REGEXP_DFA OFF CACHE BOOL - "Build regexp_dfa (needs private RE2 headers)" FORCE) - message(WARNING "System RE2 detected: regexp_dfa will NOT be built") -else() - set(FUZZTEST_BUILD_REGEXP_DFA ON CACHE BOOL - "Build regexp_dfa (needs private RE2 headers)" FORCE) -endif() + set(gtest_URL https://github.com/google/googletest.git) + set(gtest_TAG v1.16.0) + set(proto_URL https://github.com/protocolbuffers/protobuf.git) + set(proto_TAG v30.2) -set(gtest_URL https://github.com/google/googletest.git) -set(gtest_TAG v1.16.0) + set(nlohmann_json_URL https://github.com/nlohmann/json.git) + set(nlohmann_json_TAG v3.11.3) + + set(flatbuffers_URL https://github.com/google/flatbuffers.git) + set(flatbuffers_TAG v25.2.10) +endif() # From https://www.antlr.org/download.html set(antlr_cpp_URL https://www.antlr.org/download/antlr4-cpp-runtime-4.12.0-source.zip) set(antlr_cpp_MD5 acf7371bd7562188712751266d8a7b90) -set(proto_URL https://github.com/protocolbuffers/protobuf.git) -set(proto_TAG v30.2) - -set(nlohmann_json_URL https://github.com/nlohmann/json.git) -set(nlohmann_json_TAG v3.11.3) - -set(flatbuffers_URL https://github.com/google/flatbuffers.git) -set(flatbuffers_TAG v25.2.10) - if(POLICY CMP0135) - cmake_policy(SET CMP0135 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) + cmake_policy(SET CMP0135 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) endif() -FetchContent_Declare( - abseil-cpp - GIT_REPOSITORY ${absl_URL} - GIT_TAG ${absl_TAG} -) - -FetchContent_Declare( - googletest - GIT_REPOSITORY ${gtest_URL} - GIT_TAG ${gtest_TAG} -) - -FetchContent_Declare( - antlr_cpp - URL ${antlr_cpp_URL} - URL_HASH MD5=${antlr_cpp_MD5} -) - -if (FUZZTEST_BUILD_FLATBUFFERS) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES) FetchContent_Declare( - flatbuffers - GIT_REPOSITORY ${flatbuffers_URL} - GIT_TAG ${flatbuffers_TAG} + abseil-cpp + GIT_REPOSITORY ${absl_URL} + GIT_TAG ${absl_TAG} ) -endif() - -if (FUZZTEST_BUILD_TESTING) FetchContent_Declare( - protobuf - GIT_REPOSITORY ${proto_URL} - GIT_TAG ${proto_TAG} + re2 + GIT_REPOSITORY ${re2_URL} + GIT_TAG ${re2_TAG} ) FetchContent_Declare( - nlohmann_json - GIT_REPOSITORY ${nlohmann_json_URL} - GIT_TAG ${nlohmann_json_TAG} + googletest + GIT_REPOSITORY ${gtest_URL} + GIT_TAG ${gtest_TAG} ) +else() + find_package(absl REQUIRED) + find_package(re2 REQUIRED) + find_package(GTest REQUIRED) +endif() + +FetchContent_Declare( + antlr_cpp + URL ${antlr_cpp_URL} + URL_HASH MD5=${antlr_cpp_MD5} +) +if (FUZZTEST_BUILD_FLATBUFFERS) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + FetchContent_Declare( + flatbuffers + GIT_REPOSITORY ${flatbuffers_URL} + GIT_TAG ${flatbuffers_TAG} + ) + else() + find_package(flatbuffers REQUIRED) + endif() +endif() + +if (FUZZTEST_BUILD_TESTING) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + FetchContent_Declare( + protobuf + GIT_REPOSITORY ${proto_URL} + GIT_TAG ${proto_TAG} + ) + + FetchContent_Declare( + nlohmann_json + GIT_REPOSITORY ${nlohmann_json_URL} + GIT_TAG ${nlohmann_json_TAG} + ) + else() + find_package(Protobuf REQUIRED) + add_library(protobuf::libprotobuf ALIAS Protobuf::protobuf) + find_package(nlohmann_json REQUIRED) + endif() endif () -set(ABSL_PROPAGATE_CXX_STD ON) -set(ABSL_ENABLE_INSTALL ON) -FetchContent_MakeAvailable(abseil-cpp) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + set(ABSL_PROPAGATE_CXX_STD ON) + set(ABSL_ENABLE_INSTALL ON) + FetchContent_MakeAvailable(abseil-cpp) -set(GTEST_HAS_ABSL ON) -FetchContent_MakeAvailable(googletest) + set(RE2_BUILD_TESTING OFF) + FetchContent_MakeAvailable(re2) + + set(GTEST_HAS_ABSL ON) + FetchContent_MakeAvailable(googletest) +endif() FetchContent_MakeAvailable(antlr_cpp) if (FUZZTEST_BUILD_TESTING) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + set(protobuf_BUILD_TESTS OFF) + set(protobuf_INSTALL OFF) + FetchContent_MakeAvailable(protobuf) - set(protobuf_BUILD_TESTS OFF) - set(protobuf_INSTALL OFF) - FetchContent_MakeAvailable(protobuf) - - FetchContent_MakeAvailable(nlohmann_json) - + FetchContent_MakeAvailable(nlohmann_json) + endif() endif () if (FUZZTEST_BUILD_FLATBUFFERS) - set(FLATBUFFERS_BUILD_TESTS OFF) - set(FLATBUFFERS_BUILD_INSTALL OFF) - FetchContent_MakeAvailable(flatbuffers) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + set(FLATBUFFERS_BUILD_TESTS OFF) + set(FLATBUFFERS_BUILD_INSTALL OFF) + FetchContent_MakeAvailable(flatbuffers) + endif() endif() diff --git a/fuzztest/CMakeLists.txt b/fuzztest/CMakeLists.txt index b465a86ac..a11b8d735 100644 --- a/fuzztest/CMakeLists.txt +++ b/fuzztest/CMakeLists.txt @@ -234,25 +234,3 @@ fuzztest_cc_library( fuzztest::io fuzztest::core_domains_impl ) - -if (FUZZTEST_BUILD_REGEXP_DFA) - fuzztest_cc_library( - NAME - regexp_dfa - HDRS - "regexp_dfa.h" - SRCS - "regexp_dfa.cc" - DEPS - absl::flat_hash_map - absl::random_bit_gen_ref - absl::random_distributions - absl::status - absl::statusor - absl::strings - absl::string_view - fuzztest::common_logging - fuzztest::logging - re2::re2 - ) -endif () diff --git a/fuzztest/internal/domains/CMakeLists.txt b/fuzztest/internal/domains/CMakeLists.txt index 63a084b75..dc71293ef 100644 --- a/fuzztest/internal/domains/CMakeLists.txt +++ b/fuzztest/internal/domains/CMakeLists.txt @@ -117,12 +117,6 @@ fuzztest_cc_library( fuzztest::type_support ) -if(FUZZTEST_BUILD_REGEXP_DFA) - set(EXTRA_REGEXP_DFA_DEPS fuzztest::regexp_dfa) -else() - set(EXTRA_REGEXP_DFA_DEPS "") -endif() - fuzztest_cc_library( NAME in_grammar_impl @@ -133,7 +127,6 @@ fuzztest_cc_library( DEPS fuzztest::core_domains_impl fuzztest::in_regexp_impl - ${EXTRA_REGEXP_DFA_DEPS} absl::flat_hash_map absl::random_bit_gen_ref absl::random_distributions @@ -156,7 +149,6 @@ fuzztest_cc_library( "in_regexp_impl.cc" DEPS fuzztest::core_domains_impl - ${EXTRA_REGEXP_DFA_DEPS} absl::random_bit_gen_ref absl::random_distributions absl::status @@ -198,29 +190,6 @@ fuzztest_cc_library( fuzztest::type_support ) -if(FUZZTEST_BUILD_REGEXP_DFA) - fuzztest_cc_library( - NAME - regexp_dfa - HDRS - "regexp_dfa.h" - SRCS - "regexp_dfa.cc" - DEPS - absl::flat_hash_map - absl::random_bit_gen_ref - absl::random_distributions - absl::status - absl::statusor - absl::strings - absl::string_view - fuzztest::common_logging - fuzztest::logging - re2::re2 - ) -endif() - - fuzztest_cc_library( NAME utf @@ -233,25 +202,3 @@ fuzztest_cc_library( DEPS absl::string_view ) - -if(FUZZTEST_BUILD_REGEXP_DFA) - fuzztest_cc_library( - NAME - regexp_dfa - HDRS - "regexp_dfa.h" - SRCS - "regexp_dfa.cc" - DEPS - absl::flat_hash_map - absl::random_bit_gen_ref - absl::random_distributions - absl::status - absl::statusor - absl::strings - absl::string_view - fuzztest::common_logging - fuzztest::logging - re2::re2 - ) -endif() From 503386bae91da8636cdb94549f844e02e3f69dc0 Mon Sep 17 00:00:00 2001 From: John Doe Date: Thu, 18 Sep 2025 15:29:49 +0300 Subject: [PATCH 3/6] DOWNLOAD_DEPENDENCIES flag change re2 fetch not ifed reorder for gtest reorder for re2 reorder for re2 revert changes fetchcontent patch Delete CHANGES.md formatting fix formatting x2 fetch content fix --- CHANGES.md | 61 ---- cmake/BuildDependencies.cmake | 115 ++++--- fuzztest/CMakeLists.txt | 366 +++++++++++------------ fuzztest/internal/CMakeLists.txt | 5 +- fuzztest/internal/domains/CMakeLists.txt | 22 ++ 5 files changed, 277 insertions(+), 292 deletions(-) delete mode 100644 CHANGES.md diff --git a/CHANGES.md b/CHANGES.md deleted file mode 100644 index d75ac3a9f..000000000 --- a/CHANGES.md +++ /dev/null @@ -1,61 +0,0 @@ -# Issue with Private RE2 Headers in FuzzTest - -## Problem - -The FuzzTest library uses **RE2** for regular expressions. -In FuzzTest, the module `regexp_dfa.cc` directly includes **private RE2 headers**: - -```cpp -#include "re2/prog.h" -``` - -These headers are not exported when RE2 is installed via CMake (make install) or from system packages. -As a result: -- Building with system RE2 (-DFUZZTEST_USE_SYSTEM_RE2=ON) fails: - -```angular2html -fatal error: 're2/prog.h' file not found -``` -- The problem occurs only for regexp_dfa and modules depending on it. - -RE2 separates headers into: -Public headers (re2/re2.h, re2/set.h, re2/filtered_re2.h) — available after install and in system packages. -Private headers (re2/prog.h, etc.) — only present in source tree, not exported via CMake install. -FuzzTest directly uses private headers, making system RE2 incompatible without build modifications. - -## Solution - -- Conditionally build: -```angular2html -option(FUZZTEST_BUILD_REGEXP_DFA "Build regexp_dfa (needs private RE2 headers)" ON) -``` - -- Disable regexp_dfa when using external RE2: -```angular2html -if(FUZZTEST_USE_SYSTEM_RE2) -... - set(FUZZTEST_BUILD_REGEXP_DFA OFF CACHE BOOL "" FORCE) -... -``` - -- Conditional dependencies added to libraries that depend on regexp_dfa: -```angular2html -if(FUZZTEST_BUILD_REGEXP_DFA) - set(EXTRA_REGEXP_DFA_DEPS fuzztest::regexp_dfa) -else() - set(EXTRA_REGEXP_DFA_DEPS "") -endif() -``` - -With that: -1. With system RE2, regexp_dfa is skipped; FuzzTest builds successfully. -2. With FetchContent(RE2) (source), private headers are available; regexp_dfa is built. - -## Outcome - -Eliminated the fatal error: ```'re2/prog.h' file not found ``` issue when using system RE2. -FuzzTest builds correctly in both scenarios: -1. System RE2 without private headers -2. RE2 from source with private headers - -Trying rewriting the regexp_dfa via using only public set/re2 API is impossible - there simply are no such tools (I tried). diff --git a/cmake/BuildDependencies.cmake b/cmake/BuildDependencies.cmake index f40349305..e56d94be7 100644 --- a/cmake/BuildDependencies.cmake +++ b/cmake/BuildDependencies.cmake @@ -16,71 +16,88 @@ cmake_minimum_required(VERSION 3.19) include(FetchContent) -if(FUZZTEST_DOWNLOAD_DEPENDENCIES) - set(absl_URL https://github.com/abseil/abseil-cpp.git) - set(absl_TAG d04b964d82ed5146f7e5e34701a5ba69f9514c9a) - - set(re2_URL https://github.com/google/re2.git) - set(re2_TAG 2024-07-02) - - set(gtest_URL https://github.com/google/googletest.git) - set(gtest_TAG v1.16.0) +set(absl_URL https://github.com/abseil/abseil-cpp.git) +set(absl_TAG d04b964d82ed5146f7e5e34701a5ba69f9514c9a) - set(proto_URL https://github.com/protocolbuffers/protobuf.git) - set(proto_TAG v30.2) +set(re2_URL https://github.com/google/re2.git) +set(re2_TAG 2024-07-02) - set(nlohmann_json_URL https://github.com/nlohmann/json.git) - set(nlohmann_json_TAG v3.11.3) - - set(flatbuffers_URL https://github.com/google/flatbuffers.git) - set(flatbuffers_TAG v25.2.10) -endif() +set(gtest_URL https://github.com/google/googletest.git) +set(gtest_TAG v1.16.0) # From https://www.antlr.org/download.html set(antlr_cpp_URL https://www.antlr.org/download/antlr4-cpp-runtime-4.12.0-source.zip) set(antlr_cpp_MD5 acf7371bd7562188712751266d8a7b90) +set(proto_URL https://github.com/protocolbuffers/protobuf.git) +set(proto_TAG v30.2) + +set(nlohmann_json_URL https://github.com/nlohmann/json.git) +set(nlohmann_json_TAG v3.11.3) + +set(flatbuffers_URL https://github.com/google/flatbuffers.git) +set(flatbuffers_TAG v25.2.10) + if(POLICY CMP0135) - cmake_policy(SET CMP0135 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) + cmake_policy(SET CMP0135 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) endif() if(FUZZTEST_DOWNLOAD_DEPENDENCIES) FetchContent_Declare( - abseil-cpp - GIT_REPOSITORY ${absl_URL} - GIT_TAG ${absl_TAG} + abseil-cpp + GIT_REPOSITORY ${absl_URL} + GIT_TAG ${absl_TAG} ) +else() + find_package(absl QUIET) + if(NOT absl_FOUND) + message(WARNING "FUZZTEST_DOWNLOAD_DEPENDENCIES=OFF and absl not found via find_package.\n") + endif() +endif() +if(FUZZTEST_DOWNLOAD_DEPENDENCIES) FetchContent_Declare( - re2 - GIT_REPOSITORY ${re2_URL} - GIT_TAG ${re2_TAG} + re2 + GIT_REPOSITORY ${re2_URL} + GIT_TAG ${re2_TAG} ) +else() + if(DEFINED RE2_SOURCE_DIR) + message(STATUS "FUZZTEST_DOWNLOAD_DEPENDENCIES=OFF: using local re2 source at ${RE2_SOURCE_DIR}") + FetchContent_Declare( + re2 + SOURCE_DIR ${RE2_SOURCE_DIR} + GIT_REPOSITORY ${re2_URL} + GIT_TAG ${re2_TAG} + ) + else() + message(FATAL_ERROR "FUZZTEST_DOWNLOAD_DEPENDENCIES=OFF but RE2_SOURCE_DIR is not set.\n") + endif() +endif() +if(FUZZTEST_DOWNLOAD_DEPENDENCIES) FetchContent_Declare( - googletest - GIT_REPOSITORY ${gtest_URL} - GIT_TAG ${gtest_TAG} + googletest + GIT_REPOSITORY ${gtest_URL} + GIT_TAG ${gtest_TAG} ) else() - find_package(absl REQUIRED) - find_package(re2 REQUIRED) find_package(GTest REQUIRED) endif() FetchContent_Declare( - antlr_cpp - URL ${antlr_cpp_URL} - URL_HASH MD5=${antlr_cpp_MD5} + antlr_cpp + URL ${antlr_cpp_URL} + URL_HASH MD5=${antlr_cpp_MD5} ) if (FUZZTEST_BUILD_FLATBUFFERS) if(FUZZTEST_DOWNLOAD_DEPENDENCIES) FetchContent_Declare( - flatbuffers - GIT_REPOSITORY ${flatbuffers_URL} - GIT_TAG ${flatbuffers_TAG} + flatbuffers + GIT_REPOSITORY ${flatbuffers_URL} + GIT_TAG ${flatbuffers_TAG} ) else() find_package(flatbuffers REQUIRED) @@ -90,19 +107,21 @@ endif() if (FUZZTEST_BUILD_TESTING) if(FUZZTEST_DOWNLOAD_DEPENDENCIES) FetchContent_Declare( - protobuf - GIT_REPOSITORY ${proto_URL} - GIT_TAG ${proto_TAG} + protobuf + GIT_REPOSITORY ${proto_URL} + GIT_TAG ${proto_TAG} ) FetchContent_Declare( - nlohmann_json - GIT_REPOSITORY ${nlohmann_json_URL} - GIT_TAG ${nlohmann_json_TAG} + nlohmann_json + GIT_REPOSITORY ${nlohmann_json_URL} + GIT_TAG ${nlohmann_json_TAG} ) else() find_package(Protobuf REQUIRED) - add_library(protobuf::libprotobuf ALIAS Protobuf::protobuf) + if(TARGET Protobuf::protobuf AND NOT TARGET protobuf::libprotobuf) + add_library(protobuf::libprotobuf ALIAS Protobuf::protobuf) + endif() find_package(nlohmann_json REQUIRED) endif() endif () @@ -111,10 +130,16 @@ if(FUZZTEST_DOWNLOAD_DEPENDENCIES) set(ABSL_PROPAGATE_CXX_STD ON) set(ABSL_ENABLE_INSTALL ON) FetchContent_MakeAvailable(abseil-cpp) +else() + if(TARGET absl::absl) + message(STATUS "Using system absl target absl::absl") + endif() +endif() - set(RE2_BUILD_TESTING OFF) - FetchContent_MakeAvailable(re2) +set(RE2_BUILD_TESTING OFF) +FetchContent_MakeAvailable(re2) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES) set(GTEST_HAS_ABSL ON) FetchContent_MakeAvailable(googletest) endif() diff --git a/fuzztest/CMakeLists.txt b/fuzztest/CMakeLists.txt index a11b8d735..d5aaedb46 100644 --- a/fuzztest/CMakeLists.txt +++ b/fuzztest/CMakeLists.txt @@ -13,224 +13,224 @@ # limitations under the License. if (NOT COMPILER_GCC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0") -endif () + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0") +endif() fuzztest_cc_library( - NAME - domain - HDRS - "domain.h" - DEPS - fuzztest::domain_core - fuzztest::domains_impl - fuzztest::in_regexp_impl - fuzztest::protobuf_domain_impl + NAME + domain + HDRS + "domain.h" + DEPS + fuzztest::domain_core + fuzztest::domains_impl + fuzztest::in_regexp_impl + fuzztest::protobuf_domain_impl ) fuzztest_cc_library( - NAME - domain_core - HDRS - "domain_core.h" - DEPS - absl::flat_hash_map - absl::random_bit_gen_ref - absl::status - absl::statusor - absl::string_view - absl::span - fuzztest::common_logging - fuzztest::any - fuzztest::logging - fuzztest::meta - fuzztest::printer - fuzztest::serialization - fuzztest::type_support - fuzztest::core_domains_impl - fuzztest::utf + NAME + domain_core + HDRS + "domain_core.h" + DEPS + absl::flat_hash_map + absl::random_bit_gen_ref + absl::status + absl::statusor + absl::string_view + absl::span + fuzztest::common_logging + fuzztest::any + fuzztest::logging + fuzztest::meta + fuzztest::printer + fuzztest::serialization + fuzztest::type_support + fuzztest::core_domains_impl + fuzztest::utf ) fuzztest_cc_library( - NAME - fuzzing_bit_gen - HDRS - "fuzzing_bit_gen.h" - SRCS - "fuzzing_bit_gen.cc" - DEPS - absl::fast_type_id - absl::no_destructor - absl::flat_hash_map - absl::bits - absl::int128 - absl::random_bit_gen_ref - absl::span - fuzztest::register_fuzzing_mocks + NAME + fuzzing_bit_gen + HDRS + "fuzzing_bit_gen.h" + SRCS + "fuzzing_bit_gen.cc" + DEPS + absl::fast_type_id + absl::no_destructor + absl::flat_hash_map + absl::bits + absl::int128 + absl::random_bit_gen_ref + absl::span + fuzztest::register_fuzzing_mocks ) fuzztest_cc_library( - NAME - fuzztest - HDRS - "fuzztest.h" - DEPS - fuzztest::domain - fuzztest::fuzztest_macros + NAME + fuzztest + HDRS + "fuzztest.h" + DEPS + fuzztest::domain + fuzztest::fuzztest_macros ) fuzztest_cc_library( - NAME - fuzztest_core - HDRS - "fuzztest_core.h" - DEPS - fuzztest::domain_core - fuzztest::fuzztest_macros + NAME + fuzztest_core + HDRS + "fuzztest_core.h" + DEPS + fuzztest::domain_core + fuzztest::fuzztest_macros ) if (FUZZTEST_BUILD_FLATBUFFERS) - fuzztest_cc_library( - NAME - flatbuffers - HDRS - "flatbuffers.h" - "internal/domains/flatbuffers_domain_impl.h" - SRCS - "internal/domains/flatbuffers_domain_impl.cc" - DEPS - absl::algorithm_container - absl::core_headers - absl::flat_hash_map - absl::flat_hash_set - absl::nullability - absl::random_bit_gen_ref - absl::random_distributions - absl::random_random - absl::status - absl::statusor - absl::str_format - absl::strings - absl::synchronization - flatbuffers - fuzztest::any - fuzztest::domain_core - fuzztest::logging - fuzztest::meta - fuzztest::serialization - fuzztest::status - fuzztest::type_support - ) -endif () + fuzztest_cc_library( + NAME + flatbuffers + HDRS + "flatbuffers.h" + "internal/domains/flatbuffers_domain_impl.h" + SRCS + "internal/domains/flatbuffers_domain_impl.cc" + DEPS + absl::algorithm_container + absl::core_headers + absl::flat_hash_map + absl::flat_hash_set + absl::nullability + absl::random_bit_gen_ref + absl::random_distributions + absl::random_random + absl::status + absl::statusor + absl::str_format + absl::strings + absl::synchronization + flatbuffers + fuzztest::any + fuzztest::domain_core + fuzztest::logging + fuzztest::meta + fuzztest::serialization + fuzztest::status + fuzztest::type_support + ) +endif() fuzztest_cc_library( - NAME - fuzztest_gtest_main - SRCS - "fuzztest_gtest_main.cc" - DEPS - fuzztest::init_fuzztest - GTest::gtest + NAME + fuzztest_gtest_main + SRCS + "fuzztest_gtest_main.cc" + DEPS + fuzztest::init_fuzztest + GTest::gtest ) fuzztest_cc_library( - NAME - fuzztest_macros - HDRS - "fuzztest_macros.h" - SRCS - "fuzztest_macros.cc" - DEPS - absl::status - absl::statusor - absl::strings - absl::string_view - fuzztest::logging - fuzztest::common_logging - fuzztest::registration - fuzztest::registry - fuzztest::runtime + NAME + fuzztest_macros + HDRS + "fuzztest_macros.h" + SRCS + "fuzztest_macros.cc" + DEPS + absl::status + absl::statusor + absl::strings + absl::string_view + fuzztest::logging + fuzztest::common_logging + fuzztest::registration + fuzztest::registry + fuzztest::runtime ) fuzztest_cc_test( - NAME - fuzztest_macros_test - SRCS - "fuzztest_macros_test.cc" - DEPS - fuzztest::fuzztest_macros - absl::status - absl::strings - fuzztest::common_logging - fuzztest::temp_dir - GTest::gmock_main + NAME + fuzztest_macros_test + SRCS + "fuzztest_macros_test.cc" + DEPS + fuzztest::fuzztest_macros + absl::status + absl::strings + fuzztest::common_logging + fuzztest::temp_dir + GTest::gmock_main ) fuzztest_cc_library( - NAME - googletest_fixture_adapter - HDRS - "googletest_fixture_adapter.h" - DEPS - fuzztest::fixture_driver - GTest::gtest + NAME + googletest_fixture_adapter + HDRS + "googletest_fixture_adapter.h" + DEPS + fuzztest::fixture_driver + GTest::gtest ) fuzztest_cc_library( - NAME - init_fuzztest - HDRS - "init_fuzztest.h" - SRCS - "init_fuzztest.cc" - DEPS - absl::algorithm_container - absl::no_destructor - absl::flat_hash_set - absl::flags - absl::flags_parse - absl::flags_reflection - absl::strings - absl::str_format - absl::time - fuzztest::common_logging - fuzztest::configuration - fuzztest::flag_name - fuzztest::googletest_adaptor - fuzztest::io - fuzztest::registry - fuzztest::runtime - GTest::gtest + NAME + init_fuzztest + HDRS + "init_fuzztest.h" + SRCS + "init_fuzztest.cc" + DEPS + absl::algorithm_container + absl::no_destructor + absl::flat_hash_set + absl::flags + absl::flags_parse + absl::flags_reflection + absl::strings + absl::str_format + absl::time + fuzztest::common_logging + fuzztest::configuration + fuzztest::flag_name + fuzztest::googletest_adaptor + fuzztest::io + fuzztest::registry + fuzztest::runtime + GTest::gtest ) fuzztest_cc_library( - NAME - llvm_fuzzer_main - SRCS - "llvm_fuzzer_main.cc" - DEPS - fuzztest::init_fuzztest - absl::flags - absl::flags_parse - GTest::gtest + NAME + llvm_fuzzer_main + SRCS + "llvm_fuzzer_main.cc" + DEPS + fuzztest::init_fuzztest + absl::flags + absl::flags_parse + GTest::gtest ) fuzztest_cc_library( - NAME - llvm_fuzzer_wrapper - SRCS - "llvm_fuzzer_wrapper.cc" - DEPS - fuzztest::fuzztest - fuzztest::fuzztest_macros - absl::core_headers - absl::no_destructor - absl::flags - absl::random_random - absl::random_bit_gen_ref - absl::synchronization - fuzztest::common_logging - fuzztest::io - fuzztest::core_domains_impl + NAME + llvm_fuzzer_wrapper + SRCS + "llvm_fuzzer_wrapper.cc" + DEPS + fuzztest::fuzztest + fuzztest::fuzztest_macros + absl::core_headers + absl::no_destructor + absl::flags + absl::random_random + absl::random_bit_gen_ref + absl::synchronization + fuzztest::common_logging + fuzztest::io + fuzztest::core_domains_impl ) diff --git a/fuzztest/internal/CMakeLists.txt b/fuzztest/internal/CMakeLists.txt index 667a695c5..231f40bf8 100644 --- a/fuzztest/internal/CMakeLists.txt +++ b/fuzztest/internal/CMakeLists.txt @@ -500,11 +500,11 @@ fuzztest_proto_library( if (FUZZTEST_BUILD_FLATBUFFERS) fuzztest_flatbuffers_generate_headers( - TARGET + TARGET test_flatbuffers_headers SCHEMAS "test_flatbuffers.fbs" - FLAGS + FLAGS --bfbs-gen-embed --gen-name-strings TESTONLY ) @@ -550,4 +550,3 @@ fuzztest_cc_test( GTest::gmock_main protobuf::libprotobuf ) - diff --git a/fuzztest/internal/domains/CMakeLists.txt b/fuzztest/internal/domains/CMakeLists.txt index dc71293ef..6e27f1577 100644 --- a/fuzztest/internal/domains/CMakeLists.txt +++ b/fuzztest/internal/domains/CMakeLists.txt @@ -127,6 +127,7 @@ fuzztest_cc_library( DEPS fuzztest::core_domains_impl fuzztest::in_regexp_impl + fuzztest::regexp_dfa absl::flat_hash_map absl::random_bit_gen_ref absl::random_distributions @@ -149,6 +150,7 @@ fuzztest_cc_library( "in_regexp_impl.cc" DEPS fuzztest::core_domains_impl + fuzztest::regexp_dfa absl::random_bit_gen_ref absl::random_distributions absl::status @@ -190,6 +192,26 @@ fuzztest_cc_library( fuzztest::type_support ) +fuzztest_cc_library( + NAME + regexp_dfa + HDRS + "regexp_dfa.h" + SRCS + "regexp_dfa.cc" + DEPS + absl::flat_hash_map + absl::random_bit_gen_ref + absl::random_distributions + absl::status + absl::statusor + absl::strings + absl::string_view + fuzztest::common_logging + fuzztest::logging + re2::re2 +) + fuzztest_cc_library( NAME utf From 34a090caac943137ee6766d4c6f82c4e528a8190 Mon Sep 17 00:00:00 2001 From: Aleksandr Kondakov Date: Tue, 23 Sep 2025 09:25:38 +0300 Subject: [PATCH 4/6] add separate download flags --- CMakeLists.txt | 9 ++++- cmake/BuildDependencies.cmake | 62 ++++++++++++++------------------ fuzztest/internal/CMakeLists.txt | 4 +-- 3 files changed, 36 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b16dcdab..4fc847abd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,14 @@ cmake_minimum_required(VERSION 3.19) project(fuzztest) -option(FUZZTEST_DOWNLOAD_DEPENDENCIES "Download dependencies using FetchContent." ON) +option(FUZZTEST_DOWNLOAD_ABSL "Download abseil-cpp using FetchContent." OFF) +option(FUZZTEST_DOWNLOAD_RE2 "Download re2 using FetchContent." OFF) +option(FUZZTEST_DOWNLOAD_GTEST "Download googletest using FetchContent." OFF) +option(FUZZTEST_DOWNLOAD_PROTOBUF "Download protobuf using FetchContent." OFF) +option(FUZZTEST_DOWNLOAD_NLOHMANN "Download nlohmann_json using FetchContent." OFF) +option(FUZZTEST_DOWNLOAD_FLATBUFFERS "Download flatbuffers using FetchContent." OFF) +option(FUZZTEST_DOWNLOAD_DEPENDENCIES "Download all dependencies using FetchContent." ON) + option(FUZZTEST_BUILD_TESTING "Building the tests." OFF) option(FUZZTEST_BUILD_FLATBUFFERS "Building the flatbuffers support." OFF) option(FUZZTEST_FUZZING_MODE "Building the fuzztest in fuzzing mode." OFF) diff --git a/cmake/BuildDependencies.cmake b/cmake/BuildDependencies.cmake index e56d94be7..7172465ce 100644 --- a/cmake/BuildDependencies.cmake +++ b/cmake/BuildDependencies.cmake @@ -39,44 +39,31 @@ set(flatbuffers_URL https://github.com/google/flatbuffers.git) set(flatbuffers_TAG v25.2.10) if(POLICY CMP0135) - cmake_policy(SET CMP0135 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) + cmake_policy(SET CMP0135 NEW) + set(CMAKE_POLICY_DEFAULT_CMP0135 NEW) endif() -if(FUZZTEST_DOWNLOAD_DEPENDENCIES) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_ABSL) FetchContent_Declare( abseil-cpp GIT_REPOSITORY ${absl_URL} GIT_TAG ${absl_TAG} ) else() - find_package(absl QUIET) - if(NOT absl_FOUND) - message(WARNING "FUZZTEST_DOWNLOAD_DEPENDENCIES=OFF and absl not found via find_package.\n") - endif() + find_package(absl REQUIRED) endif() -if(FUZZTEST_DOWNLOAD_DEPENDENCIES) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_RE2) FetchContent_Declare( re2 GIT_REPOSITORY ${re2_URL} GIT_TAG ${re2_TAG} ) else() - if(DEFINED RE2_SOURCE_DIR) - message(STATUS "FUZZTEST_DOWNLOAD_DEPENDENCIES=OFF: using local re2 source at ${RE2_SOURCE_DIR}") - FetchContent_Declare( - re2 - SOURCE_DIR ${RE2_SOURCE_DIR} - GIT_REPOSITORY ${re2_URL} - GIT_TAG ${re2_TAG} - ) - else() - message(FATAL_ERROR "FUZZTEST_DOWNLOAD_DEPENDENCIES=OFF but RE2_SOURCE_DIR is not set.\n") - endif() + find_package(re2 REQUIRED) endif() -if(FUZZTEST_DOWNLOAD_DEPENDENCIES) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_GTEST) FetchContent_Declare( googletest GIT_REPOSITORY ${gtest_URL} @@ -93,7 +80,7 @@ FetchContent_Declare( ) if (FUZZTEST_BUILD_FLATBUFFERS) - if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_FLATBUFFERS) FetchContent_Declare( flatbuffers GIT_REPOSITORY ${flatbuffers_URL} @@ -105,23 +92,26 @@ if (FUZZTEST_BUILD_FLATBUFFERS) endif() if (FUZZTEST_BUILD_TESTING) - if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_PROTOBUF) FetchContent_Declare( protobuf GIT_REPOSITORY ${proto_URL} GIT_TAG ${proto_TAG} ) - + else() + find_package(Protobuf REQUIRED) + if(TARGET Protobuf::protobuf AND NOT TARGET protobuf::libprotobuf) + add_library(protobuf::libprotobuf ALIAS Protobuf::protobuf) + endif() + endif () + + if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_NLOHMANN) FetchContent_Declare( nlohmann_json GIT_REPOSITORY ${nlohmann_json_URL} GIT_TAG ${nlohmann_json_TAG} ) else() - find_package(Protobuf REQUIRED) - if(TARGET Protobuf::protobuf AND NOT TARGET protobuf::libprotobuf) - add_library(protobuf::libprotobuf ALIAS Protobuf::protobuf) - endif() find_package(nlohmann_json REQUIRED) endif() endif () @@ -130,16 +120,14 @@ if(FUZZTEST_DOWNLOAD_DEPENDENCIES) set(ABSL_PROPAGATE_CXX_STD ON) set(ABSL_ENABLE_INSTALL ON) FetchContent_MakeAvailable(abseil-cpp) -else() - if(TARGET absl::absl) - message(STATUS "Using system absl target absl::absl") - endif() endif() -set(RE2_BUILD_TESTING OFF) -FetchContent_MakeAvailable(re2) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_RE2) + set(RE2_BUILD_TESTING OFF) + FetchContent_MakeAvailable(re2) +endif () -if(FUZZTEST_DOWNLOAD_DEPENDENCIES) +if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_ABSL) set(GTEST_HAS_ABSL ON) FetchContent_MakeAvailable(googletest) endif() @@ -147,17 +135,19 @@ endif() FetchContent_MakeAvailable(antlr_cpp) if (FUZZTEST_BUILD_TESTING) - if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_PROTOBUF) set(protobuf_BUILD_TESTS OFF) set(protobuf_INSTALL OFF) FetchContent_MakeAvailable(protobuf) + endif() + if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_NLOHMANN) FetchContent_MakeAvailable(nlohmann_json) endif() endif () if (FUZZTEST_BUILD_FLATBUFFERS) - if(FUZZTEST_DOWNLOAD_DEPENDENCIES) + if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_FLATBUFFERS) set(FLATBUFFERS_BUILD_TESTS OFF) set(FLATBUFFERS_BUILD_INSTALL OFF) FetchContent_MakeAvailable(flatbuffers) diff --git a/fuzztest/internal/CMakeLists.txt b/fuzztest/internal/CMakeLists.txt index 231f40bf8..3c1f35b9a 100644 --- a/fuzztest/internal/CMakeLists.txt +++ b/fuzztest/internal/CMakeLists.txt @@ -500,11 +500,11 @@ fuzztest_proto_library( if (FUZZTEST_BUILD_FLATBUFFERS) fuzztest_flatbuffers_generate_headers( - TARGET + TARGET test_flatbuffers_headers SCHEMAS "test_flatbuffers.fbs" - FLAGS + FLAGS --bfbs-gen-embed --gen-name-strings TESTONLY ) From 7eeb570876baac9d5bd62e9c563ce1b914c1560b Mon Sep 17 00:00:00 2001 From: Aleksandr Kondakov Date: Tue, 23 Sep 2025 09:30:00 +0300 Subject: [PATCH 5/6] formatting --- cmake/BuildDependencies.cmake | 18 +++++++++--------- fuzztest/.DS_Store | Bin 0 -> 8196 bytes fuzztest/internal/CMakeLists.txt | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 fuzztest/.DS_Store diff --git a/cmake/BuildDependencies.cmake b/cmake/BuildDependencies.cmake index 7172465ce..9c014bb06 100644 --- a/cmake/BuildDependencies.cmake +++ b/cmake/BuildDependencies.cmake @@ -55,9 +55,9 @@ endif() if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_RE2) FetchContent_Declare( - re2 - GIT_REPOSITORY ${re2_URL} - GIT_TAG ${re2_TAG} + re2 + GIT_REPOSITORY ${re2_URL} + GIT_TAG ${re2_TAG} ) else() find_package(re2 REQUIRED) @@ -65,18 +65,18 @@ endif() if(FUZZTEST_DOWNLOAD_DEPENDENCIES OR FUZZTEST_DOWNLOAD_GTEST) FetchContent_Declare( - googletest - GIT_REPOSITORY ${gtest_URL} - GIT_TAG ${gtest_TAG} + googletest + GIT_REPOSITORY ${gtest_URL} + GIT_TAG ${gtest_TAG} ) else() find_package(GTest REQUIRED) endif() FetchContent_Declare( - antlr_cpp - URL ${antlr_cpp_URL} - URL_HASH MD5=${antlr_cpp_MD5} + antlr_cpp + URL ${antlr_cpp_URL} + URL_HASH MD5=${antlr_cpp_MD5} ) if (FUZZTEST_BUILD_FLATBUFFERS) diff --git a/fuzztest/.DS_Store b/fuzztest/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d95001b4285da44c83286a4812e7aee2da347bde GIT binary patch literal 8196 zcmeHMOK;Oa5T5OWI8-g+ReAu)64$DPQi>3lkd{LwxDXx(KqgMy)T(1gj?*BjqMYGB z@E5r9OZYFG;G12?^(*v-5Z$$QXJgMdv-{1&&NxIQnxpPrqBSBi&{@`&FqAaD&b`p) z;xns|0(hd`Jum3kUSJn=^$E>@W$D1AKol z(OEWPIZ;yHIxxr*0CEARWy2hGfW(-wY{YV+q=dqzsvblP6>*6n6dc!0R)=iFa-yVy zlTdIHv1buiC_;J%&XnpT8cOO>GoTqLGQhR_A~oqH?a|Xr{mx&c$LJfsWRuVp+M#FE zrbBX|?b47U^bL$3C`#4-jQy6w8q}qL`arwn19Ono7hiJv%Nc!(IzWf;TSVR}Aot0G zpNMQ4(LN3bNM2{&=g%DS3Uo*G5eKiaM;0u&uw!BF$W?c!lU=vu=xd6j%V*litwJ)D zws0}A5Wy>RTwFQ!ELKupFBLFnF_!kYT7vGuukvoCqE^_yj9c2)DTi5n2Qdg_6bd$& z!_00@Ihb~OE|A*;mbHp zqYdeu{e`g7CNH;I&dERO+vDLNemnTx9(e9Bs@H#rx%q{~3zbT>vQ&B3Ita$Cs2z=l z&35>PKfMS7&z{cP_AA#JTeWLDfgiP9-w7qa?K)6-``Y!p!MGWW{O(Xs0xSmw+CdB#>t;x6+h9f@T5dZHOf z7?@YHHLm}k%zpo$=a3Z;@+l6a76pH`bddDIpkSISwhy hameHkL(EO6GNuvBiIO;j_Sato=;y!WT@UA*f!{e5%4q-q literal 0 HcmV?d00001 diff --git a/fuzztest/internal/CMakeLists.txt b/fuzztest/internal/CMakeLists.txt index 3c1f35b9a..667a695c5 100644 --- a/fuzztest/internal/CMakeLists.txt +++ b/fuzztest/internal/CMakeLists.txt @@ -550,3 +550,4 @@ fuzztest_cc_test( GTest::gmock_main protobuf::libprotobuf ) + From 91c0c4950a7722bbac3d32227703839c38249754 Mon Sep 17 00:00:00 2001 From: Aleksandr Kondakov Date: Wed, 24 Sep 2025 22:30:33 +0300 Subject: [PATCH 6/6] delete ds store --- fuzztest/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fuzztest/.DS_Store diff --git a/fuzztest/.DS_Store b/fuzztest/.DS_Store deleted file mode 100644 index d95001b4285da44c83286a4812e7aee2da347bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMOK;Oa5T5OWI8-g+ReAu)64$DPQi>3lkd{LwxDXx(KqgMy)T(1gj?*BjqMYGB z@E5r9OZYFG;G12?^(*v-5Z$$QXJgMdv-{1&&NxIQnxpPrqBSBi&{@`&FqAaD&b`p) z;xns|0(hd`Jum3kUSJn=^$E>@W$D1AKol z(OEWPIZ;yHIxxr*0CEARWy2hGfW(-wY{YV+q=dqzsvblP6>*6n6dc!0R)=iFa-yVy zlTdIHv1buiC_;J%&XnpT8cOO>GoTqLGQhR_A~oqH?a|Xr{mx&c$LJfsWRuVp+M#FE zrbBX|?b47U^bL$3C`#4-jQy6w8q}qL`arwn19Ono7hiJv%Nc!(IzWf;TSVR}Aot0G zpNMQ4(LN3bNM2{&=g%DS3Uo*G5eKiaM;0u&uw!BF$W?c!lU=vu=xd6j%V*litwJ)D zws0}A5Wy>RTwFQ!ELKupFBLFnF_!kYT7vGuukvoCqE^_yj9c2)DTi5n2Qdg_6bd$& z!_00@Ihb~OE|A*;mbHp zqYdeu{e`g7CNH;I&dERO+vDLNemnTx9(e9Bs@H#rx%q{~3zbT>vQ&B3Ita$Cs2z=l z&35>PKfMS7&z{cP_AA#JTeWLDfgiP9-w7qa?K)6-``Y!p!MGWW{O(Xs0xSmw+CdB#>t;x6+h9f@T5dZHOf z7?@YHHLm}k%zpo$=a3Z;@+l6a76pH`bddDIpkSISwhy hameHkL(EO6GNuvBiIO;j_Sato=;y!WT@UA*f!{e5%4q-q