Add bare-bones fuzztest for MoqtControlParser and MoqtDataParser The new test target uses of Google's FuzzTest framework: https://github.com/google/fuzztest In the future, it would be nice to use FuzzTest to the fullest, and test more advanced properties than "does not crash"! PiperOrigin-RevId: 769118206
diff --git a/build/source_list.bzl b/build/source_list.bzl index 978226f..1c01d4a 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -1584,6 +1584,7 @@ "quic/moqt/moqt_outgoing_queue.cc", "quic/moqt/moqt_outgoing_queue_test.cc", "quic/moqt/moqt_parser.cc", + "quic/moqt/moqt_parser_fuzz_test.cc", "quic/moqt/moqt_parser_test.cc", "quic/moqt/moqt_priority.cc", "quic/moqt/moqt_priority_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni index 433467f..5ca530c 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -1588,6 +1588,7 @@ "src/quiche/quic/moqt/moqt_outgoing_queue.cc", "src/quiche/quic/moqt/moqt_outgoing_queue_test.cc", "src/quiche/quic/moqt/moqt_parser.cc", + "src/quiche/quic/moqt/moqt_parser_fuzz_test.cc", "src/quiche/quic/moqt/moqt_parser_test.cc", "src/quiche/quic/moqt/moqt_priority.cc", "src/quiche/quic/moqt/moqt_priority_test.cc",
diff --git a/build/source_list.json b/build/source_list.json index 1e652a7..f35ce33 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -1587,6 +1587,7 @@ "quiche/quic/moqt/moqt_outgoing_queue.cc", "quiche/quic/moqt/moqt_outgoing_queue_test.cc", "quiche/quic/moqt/moqt_parser.cc", + "quiche/quic/moqt/moqt_parser_fuzz_test.cc", "quiche/quic/moqt/moqt_parser_test.cc", "quiche/quic/moqt/moqt_priority.cc", "quiche/quic/moqt/moqt_priority_test.cc",
diff --git a/quiche/quic/moqt/moqt_parser_fuzz_test.cc b/quiche/quic/moqt/moqt_parser_fuzz_test.cc new file mode 100644 index 0000000..73cadd7 --- /dev/null +++ b/quiche/quic/moqt/moqt_parser_fuzz_test.cc
@@ -0,0 +1,39 @@ +// 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. + +#include <string> + +#include "absl/strings/string_view.h" +#include "quiche/quic/moqt/moqt_parser.h" +#include "quiche/quic/moqt/test_tools/moqt_parser_test_visitor.h" +#include "quiche/common/platform/api/quiche_fuzztest.h" +#include "quiche/web_transport/test_tools/in_memory_stream.h" + +namespace moqt::test { +namespace { + +void MoqtControlParserNeverCrashes(bool is_data_stream, bool uses_web_transport, + absl::string_view stream_data, bool fin) { + webtransport::test::InMemoryStream stream(/*stream_id=*/0); + MoqtParserTestVisitor visitor(/*enable_logging=*/false); + + MoqtControlParser control_parser(uses_web_transport, &stream, visitor); + MoqtDataParser data_parser(&stream, &visitor); + + if (is_data_stream) { + stream.Receive(stream_data, /*fin=*/fin); + data_parser.ReadAllData(); + } else { + stream.Receive(stream_data, /*fin=*/false); + control_parser.ReadAndDispatchMessages(); + } +} + +FUZZ_TEST(MoqtParserTest, MoqtControlParserNeverCrashes) + .WithDomains(fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(), + fuzztest::Arbitrary<std::string>(), + fuzztest::Arbitrary<bool>()); + +} // namespace +} // namespace moqt::test