Add a length to QuicSocketAddress(sockaddr*) constructor
The length is always required when a socket address is passed as anything other than sockaddr_storage, since the size of the socket address can exceed sizeof(sockaddr).
gfe-relnote: n/a (no functional change)
PiperOrigin-RevId: 252482781
Change-Id: I7412c2abb7a18cc33326d6b805397ca244b1cc64
diff --git a/quic/platform/api/quic_socket_address.cc b/quic/platform/api/quic_socket_address.cc
index e0bb35c..f6d40df 100644
--- a/quic/platform/api/quic_socket_address.cc
+++ b/quic/platform/api/quic_socket_address.cc
@@ -14,8 +14,8 @@
QuicSocketAddress::QuicSocketAddress(const struct sockaddr_storage& saddr)
: impl_(saddr) {}
-QuicSocketAddress::QuicSocketAddress(const struct sockaddr& saddr)
- : impl_(saddr) {}
+QuicSocketAddress::QuicSocketAddress(const sockaddr* saddr, socklen_t len)
+ : impl_(saddr, len) {}
QuicSocketAddress::QuicSocketAddress(const QuicSocketAddressImpl& impl)
: impl_(impl) {}
diff --git a/quic/platform/api/quic_socket_address.h b/quic/platform/api/quic_socket_address.h
index 85e61d5..94e78a6 100644
--- a/quic/platform/api/quic_socket_address.h
+++ b/quic/platform/api/quic_socket_address.h
@@ -21,7 +21,7 @@
QuicSocketAddress() = default;
QuicSocketAddress(QuicIpAddress address, uint16_t port);
explicit QuicSocketAddress(const struct sockaddr_storage& saddr);
- explicit QuicSocketAddress(const struct sockaddr& saddr);
+ explicit QuicSocketAddress(const sockaddr* saddr, socklen_t len);
explicit QuicSocketAddress(const QuicSocketAddressImpl& impl);
QuicSocketAddress(const QuicSocketAddress& other) = default;
QuicSocketAddress& operator=(const QuicSocketAddress& other) = default;
diff --git a/quic/platform/api/quic_socket_address_test.cc b/quic/platform/api/quic_socket_address_test.cc
index 740f801..48ef46e 100644
--- a/quic/platform/api/quic_socket_address_test.cc
+++ b/quic/platform/api/quic_socket_address_test.cc
@@ -38,7 +38,8 @@
address.v4.sin_family = AF_INET;
address.v4.sin_addr = QuicIpAddress::Loopback4().GetIPv4();
address.v4.sin_port = htons(443);
- EXPECT_EQ("127.0.0.1:443", QuicSocketAddress(address.addr).ToString());
+ EXPECT_EQ("127.0.0.1:443",
+ QuicSocketAddress(&address.addr, sizeof(address.v4)).ToString());
EXPECT_EQ("127.0.0.1:443", QuicSocketAddress(address.storage).ToString());
}
@@ -53,7 +54,8 @@
address.v6.sin6_family = AF_INET6;
address.v6.sin6_addr = QuicIpAddress::Loopback6().GetIPv6();
address.v6.sin6_port = htons(443);
- EXPECT_EQ("[::1]:443", QuicSocketAddress(address.addr).ToString());
+ EXPECT_EQ("[::1]:443",
+ QuicSocketAddress(&address.addr, sizeof(address.v6)).ToString());
EXPECT_EQ("[::1]:443", QuicSocketAddress(address.storage).ToString());
}
diff --git a/quic/tools/quic_epoll_client_factory.cc b/quic/tools/quic_epoll_client_factory.cc
index 3b6b2ee..049646b 100644
--- a/quic/tools/quic_epoll_client_factory.cc
+++ b/quic/tools/quic_epoll_client_factory.cc
@@ -32,7 +32,7 @@
CHECK(info_list != nullptr);
std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list,
freeaddrinfo);
- return QuicSocketAddress(*info_list->ai_addr);
+ return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen);
}
} // namespace