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