Add quiche_fuzztest shim to quiche/common/platform/
This CL also updates the structured headers fuzzer to use fuzztest.
PiperOrigin-RevId: 768142758
diff --git a/MODULE.bazel b/MODULE.bazel
index 9056d05..c8dbff9 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -28,6 +28,9 @@
# 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")
+
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 5a8ee78..886e27a 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 89c4626..2db3feb 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 3a262e2..0809a88 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"