Module: wine Branch: master Commit: 778a1d85c48fe41b70bfed48252de7ba2c05f337 URL: http://source.winehq.org/git/wine.git/?a=commit;h=778a1d85c48fe41b70bfed4825...
Author: Juan Lang juan.lang@gmail.com Date: Thu Jul 16 08:48:32 2009 -0700
ws2_32: Make sure sockaddr is big enough when formatting an IPv6 address.
---
dlls/ws2_32/socket.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 88b2b22..0df61c7 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -4933,12 +4933,13 @@ INT WINAPI WSAAddressToStringA( LPSOCKADDR sockaddr, DWORD len,
TRACE( "(%p, %d, %p, %p, %p)\n", sockaddr, len, info, string, lenstr );
- if (!sockaddr || len < sizeof(SOCKADDR_IN)) return SOCKET_ERROR; + if (!sockaddr) return SOCKET_ERROR; if (!string || !lenstr) return SOCKET_ERROR;
switch(sockaddr->sa_family) { case WS_AF_INET: + if (len < sizeof(SOCKADDR_IN)) return SOCKET_ERROR; sprintf( buffer, "%u.%u.%u.%u:%u", (unsigned int)(ntohl( ((SOCKADDR_IN *)sockaddr)->sin_addr.WS_s_addr ) >> 24 & 0xff), (unsigned int)(ntohl( ((SOCKADDR_IN *)sockaddr)->sin_addr.WS_s_addr ) >> 16 & 0xff), @@ -4954,6 +4955,7 @@ INT WINAPI WSAAddressToStringA( LPSOCKADDR sockaddr, DWORD len, { struct WS_sockaddr_in6 *sockaddr6 = (LPSOCKADDR_IN6) sockaddr;
+ if (len < sizeof(SOCKADDR_IN6)) return SOCKET_ERROR; if (!WS_inet_ntop(WS_AF_INET6, &sockaddr6->sin6_addr, buffer, sizeof(buffer))) { WSASetLastError(WSAEINVAL);