Commit 5283d583 authored by Wez's avatar Wez Committed by Commit Bot

Initialize ip_mreq structs in UDPSocket::JoinGroup() and friends.

This ensures deterministic failure if the setsockopt() implementation
tries to make use of otherwise uninitialized fields.

Bug: 862189
Change-Id: I0be1dd6c9b830babf0911dc0d78910a20cbd0813
Reviewed-on: https://chromium-review.googlesource.com/1136374Reviewed-by: default avatarAsanka Herath <asanka@chromium.org>
Commit-Queue: Wez <wez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#574943}
parent 06d88933
...@@ -926,13 +926,13 @@ int UDPSocketPosix::SetMulticastOptions() { ...@@ -926,13 +926,13 @@ int UDPSocketPosix::SetMulticastOptions() {
switch (addr_family_) { switch (addr_family_) {
case AF_INET: { case AF_INET: {
#if defined(OS_MACOSX) || defined(OS_FUCHSIA) #if defined(OS_MACOSX) || defined(OS_FUCHSIA)
ip_mreq mreq; ip_mreq mreq = {};
int error = GetIPv4AddressFromIndex(socket_, multicast_interface_, int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
&mreq.imr_interface.s_addr); &mreq.imr_interface.s_addr);
if (error != OK) if (error != OK)
return error; return error;
#else // defined(OS_MACOSX) || defined(OS_FUCHSIA) #else // defined(OS_MACOSX) || defined(OS_FUCHSIA)
ip_mreqn mreq; ip_mreqn mreq = {};
mreq.imr_ifindex = multicast_interface_; mreq.imr_ifindex = multicast_interface_;
mreq.imr_address.s_addr = htonl(INADDR_ANY); mreq.imr_address.s_addr = htonl(INADDR_ANY);
#endif // !defined(OS_MACOSX) && !defined(OS_FUCHSIA) #endif // !defined(OS_MACOSX) && !defined(OS_FUCHSIA)
...@@ -1000,13 +1000,13 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_address) const { ...@@ -1000,13 +1000,13 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_address) const {
return ERR_ADDRESS_INVALID; return ERR_ADDRESS_INVALID;
#if defined(OS_MACOSX) || defined(OS_FUCHSIA) #if defined(OS_MACOSX) || defined(OS_FUCHSIA)
ip_mreq mreq; ip_mreq mreq = {};
int error = GetIPv4AddressFromIndex(socket_, multicast_interface_, int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
&mreq.imr_interface.s_addr); &mreq.imr_interface.s_addr);
if (error != OK) if (error != OK)
return error; return error;
#else #else
ip_mreqn mreq; ip_mreqn mreq = {};
mreq.imr_ifindex = multicast_interface_; mreq.imr_ifindex = multicast_interface_;
mreq.imr_address.s_addr = htonl(INADDR_ANY); mreq.imr_address.s_addr = htonl(INADDR_ANY);
#endif #endif
...@@ -1047,7 +1047,7 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_address) const { ...@@ -1047,7 +1047,7 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_address) const {
case IPAddress::kIPv4AddressSize: { case IPAddress::kIPv4AddressSize: {
if (addr_family_ != AF_INET) if (addr_family_ != AF_INET)
return ERR_ADDRESS_INVALID; return ERR_ADDRESS_INVALID;
ip_mreq mreq; ip_mreq mreq = {};
#if defined(OS_FUCHSIA) #if defined(OS_FUCHSIA)
// Fuchsia currently doesn't support INADDR_ANY in ip_mreq.imr_interface. // Fuchsia currently doesn't support INADDR_ANY in ip_mreq.imr_interface.
int error = GetIPv4AddressFromIndex(socket_, multicast_interface_, int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment