Add quiche_fuzztest shim to quiche/common/platform/ This relands cl/768142758. The only change is that now we pin a version of riegeli that is compatible with fuzztest, rather than using the version that fuzztest would pull in. PiperOrigin-RevId: 769109515
diff --git a/MODULE.bazel b/MODULE.bazel index 9056d05..65ba315 100644 --- a/MODULE.bazel +++ b/MODULE.bazel
@@ -28,6 +28,12 @@ # Last updated 2025-02-25 bazel_dep(name = "zlib", version = "1.3.1.bcr.5") +# Last updated 2025-06-06 +bazel_dep(name = "fuzztest", version = "20250214.0") +# Prevent fuzztest from pulling in a version of riegeli with compilation errors +# (riegeli version "0.0.0-20240606-973b6f0"). +bazel_dep(name = "riegeli", version = "0.0.0-20241218-3385e3c") + http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive(
diff --git a/build/source_list.bzl b/build/source_list.bzl index 9d46977..978226f 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -772,6 +772,7 @@ ] quiche_test_support_hdrs = [ "common/platform/api/quiche_expect_bug.h", + "common/platform/api/quiche_fuzztest.h", "common/platform/api/quiche_test.h", "common/platform/api/quiche_test_loopback.h", "common/platform/api/quiche_test_output.h", @@ -1509,6 +1510,7 @@ ] default_platform_impl_test_support_hdrs = [ "common/platform/default/quiche_platform_impl/quiche_expect_bug_impl.h", + "common/platform/default/quiche_platform_impl/quiche_fuzztest_impl.h", "common/platform/default/quiche_platform_impl/quiche_test_impl.h", "common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h", "common/platform/default/quiche_platform_impl/quiche_test_output_impl.h",
diff --git a/build/source_list.gni b/build/source_list.gni index c3436a9..433467f 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -772,6 +772,7 @@ ] quiche_test_support_hdrs = [ "src/quiche/common/platform/api/quiche_expect_bug.h", + "src/quiche/common/platform/api/quiche_fuzztest.h", "src/quiche/common/platform/api/quiche_test.h", "src/quiche/common/platform/api/quiche_test_loopback.h", "src/quiche/common/platform/api/quiche_test_output.h", @@ -1513,6 +1514,7 @@ ] default_platform_impl_test_support_hdrs = [ "src/quiche/common/platform/default/quiche_platform_impl/quiche_expect_bug_impl.h", + "src/quiche/common/platform/default/quiche_platform_impl/quiche_fuzztest_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_output_impl.h",
diff --git a/build/source_list.json b/build/source_list.json index 93ee1ee..1e652a7 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -771,6 +771,7 @@ ], "quiche_test_support_hdrs": [ "quiche/common/platform/api/quiche_expect_bug.h", + "quiche/common/platform/api/quiche_fuzztest.h", "quiche/common/platform/api/quiche_test.h", "quiche/common/platform/api/quiche_test_loopback.h", "quiche/common/platform/api/quiche_test_output.h", @@ -1512,6 +1513,7 @@ ], "default_platform_impl_test_support_hdrs": [ "quiche/common/platform/default/quiche_platform_impl/quiche_expect_bug_impl.h", + "quiche/common/platform/default/quiche_platform_impl/quiche_fuzztest_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_test_output_impl.h"
diff --git a/quiche/BUILD.bazel b/quiche/BUILD.bazel index 87cc6e3..552cc09 100644 --- a/quiche/BUILD.bazel +++ b/quiche/BUILD.bazel
@@ -234,6 +234,7 @@ "@com_google_absl//absl/types:span", "@com_google_absl//absl/types:variant", "@com_google_googletest//:gtest", + "@fuzztest//fuzztest", ], )
diff --git a/quiche/common/platform/api/quiche_fuzztest.h b/quiche/common/platform/api/quiche_fuzztest.h new file mode 100644 index 0000000..1337cab --- /dev/null +++ b/quiche/common/platform/api/quiche_fuzztest.h
@@ -0,0 +1,10 @@ +// Copyright (c) 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_PLATFORM_API_QUICHE_FUZZTEST_H_ +#define QUICHE_COMMON_PLATFORM_API_QUICHE_FUZZTEST_H_ + +#include "quiche_platform_impl/quiche_fuzztest_impl.h" // IWYU pragma: export + +#endif
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_fuzztest_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_fuzztest_impl.h new file mode 100644 index 0000000..a45cdf6 --- /dev/null +++ b/quiche/common/platform/default/quiche_platform_impl/quiche_fuzztest_impl.h
@@ -0,0 +1,6 @@ +#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FUZZTEST_IMPL_H_ +#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FUZZTEST_IMPL_H_ + +#include "fuzztest/fuzztest.h" // IWYU pragma: export + +#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_FUZZTEST_IMPL_H_
diff --git a/quiche/common/structured_headers_fuzzer.cc b/quiche/common/structured_headers_fuzzer.cc index aefeea5..71aaa76 100644 --- a/quiche/common/structured_headers_fuzzer.cc +++ b/quiche/common/structured_headers_fuzzer.cc
@@ -2,21 +2,24 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <string> + #include "absl/strings/string_view.h" +#include "quiche/common/platform/api/quiche_fuzztest.h" #include "quiche/common/structured_headers.h" namespace quiche { namespace structured_headers { -extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - absl::string_view input(reinterpret_cast<const char*>(data), size); +void CanParseWithoutCrashing(absl::string_view input) { ParseItem(input); ParseListOfLists(input); ParseList(input); ParseDictionary(input); ParseParameterisedList(input); - return 0; } +FUZZ_TEST(StructuredHeadersFuzzer, CanParseWithoutCrashing) + .WithDomains(fuzztest::Arbitrary<std::string>()); } // namespace structured_headers } // namespace quiche
diff --git a/quiche/http2/core/http2_frame_decoder_adapter_fuzzer.cc b/quiche/http2/core/http2_frame_decoder_adapter_fuzzer.cc index b54ecfa..7daa174 100644 --- a/quiche/http2/core/http2_frame_decoder_adapter_fuzzer.cc +++ b/quiche/http2/core/http2_frame_decoder_adapter_fuzzer.cc
@@ -1,4 +1,4 @@ -#include "testing/fuzzing/fuzztest.h" +#include "fuzztest/fuzztest.h" #include "quiche/http2/core/http2_frame_decoder_adapter.h" #include "quiche/http2/core/spdy_no_op_visitor.h"