ws2_32(2/3): Make sure sockaddr is big enough when formatting an IPv6 address

Juan Lang juan.lang at gmail.com
Thu Jul 16 12:04:42 CDT 2009


--Juan
-------------- next part --------------
From a239a8f26a9f71ff80f372d59b6b29eb5293a661 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Thu, 16 Jul 2009 08:48:32 -0700
Subject: [PATCH 2/3] 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);
-- 
1.6.3.2


More information about the wine-patches mailing list