Index: native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc |
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc |
index 831345557bd91d5f3ee3e35d3f3715c6f1a3bfc6..0fef5f269cca74811150fd4cb8b1e71ae4ff0d9a 100644 |
--- a/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc |
+++ b/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc |
@@ -157,10 +157,11 @@ socklen_t SocketNode::ResourceToSockAddr(PP_Resource addr, |
addr4.sin_family = AF_INET; |
addr4.sin_port = ipv4.port; |
memcpy(&addr4.sin_addr, ipv4.addr, sizeof(ipv4.addr)); |
- memcpy(out_addr, &addr4, len); |
+ memcpy(out_addr, &addr4, |
+ std::min(len, static_cast<socklen_t>(sizeof(addr4)))); |
// Returns required size not copied size like getpeername/getsockname. |
- return sizeof(sockaddr_in); |
+ return sizeof(addr4); |
} |
if (PP_TRUE == NetInterface()->DescribeAsIPv6Address(addr, &ipv6)) { |
@@ -168,10 +169,11 @@ socklen_t SocketNode::ResourceToSockAddr(PP_Resource addr, |
addr6.sin6_family = AF_INET6; |
addr6.sin6_port = ipv6.port; |
memcpy(&addr6.sin6_addr, ipv6.addr, sizeof(ipv6.addr)); |
- memcpy(out_addr, &addr6, len); |
+ memcpy(out_addr, &addr6, |
+ std::min(len, static_cast<socklen_t>(sizeof(addr6)))); |
// Returns required size not copied size like getpeername/getsockname. |
- return sizeof(sockaddr_in6); |
+ return sizeof(addr6); |
} |
return 0; |