Add a FUZZ_TEST for ParseTransportParameters()
It would be nice to also fuzz SerializeTransportParameters(), but it has some undocumented requirements on the input that trigger QUIC_BUGs.
PiperOrigin-RevId: 810527578
diff --git a/quiche/quic/core/crypto/transport_parameters_test.cc b/quiche/quic/core/crypto/transport_parameters_test.cc
index e314ede..04f3311 100644
--- a/quiche/quic/core/crypto/transport_parameters_test.cc
+++ b/quiche/quic/core/crypto/transport_parameters_test.cc
@@ -4,6 +4,7 @@
#include "quiche/quic/core/crypto/transport_parameters.h"
+#include <cstdint>
#include <cstring>
#include <memory>
#include <optional>
@@ -21,8 +22,10 @@
#include "quiche/quic/core/quic_versions.h"
#include "quiche/quic/platform/api/quic_expect_bug.h"
#include "quiche/quic/platform/api/quic_ip_address.h"
+#include "quiche/quic/platform/api/quic_socket_address.h"
#include "quiche/quic/platform/api/quic_test.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/platform/api/quiche_fuzztest.h"
namespace quic {
namespace test {
@@ -161,8 +164,6 @@
}
}
-} // namespace
-
class TransportParametersTest : public QuicTestWithParam<ParsedQuicVersion> {
protected:
TransportParametersTest() : version_(GetParam()) {}
@@ -1226,5 +1227,21 @@
EXPECT_NE(original_serialized_params_, serialized);
}
+void ParseTransportParametersDoesNotCrash(ParsedQuicVersion version,
+ Perspective perspective,
+ const std::vector<uint8_t>& data) {
+ TransportParameters params;
+ std::string error_details;
+ (void)ParseTransportParameters(version, perspective, data.data(), data.size(),
+ ¶ms, &error_details);
+}
+
+FUZZ_TEST(TransportParametersFuzzTest, ParseTransportParametersDoesNotCrash)
+ .WithDomains(fuzztest::ElementOf(AllSupportedVersions()),
+ fuzztest::ElementOf({Perspective::IS_CLIENT,
+ Perspective::IS_SERVER}),
+ fuzztest::Arbitrary<std::vector<uint8_t>>());
+
+} // namespace
} // namespace test
} // namespace quic