From cd930de18df7483575a2652f6ccc09490134089e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 5 Oct 2016 09:37:52 +0000 Subject: [PATCH] [WS2_32] Fix returned size of socketaddr on accepting connection. By Peter Hater. CORE-8549 svn path=/trunk/; revision=72909 --- reactos/dll/win32/ws2_32/src/addrinfo.c | 32 ++++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/ws2_32/src/addrinfo.c b/reactos/dll/win32/ws2_32/src/addrinfo.c index 39a6f55cfdb..f303f0b7118 100644 --- a/reactos/dll/win32/ws2_32/src/addrinfo.c +++ b/reactos/dll/win32/ws2_32/src/addrinfo.c @@ -874,12 +874,22 @@ GetNameInfoW(IN CONST SOCKADDR *pSockaddr, { DWORD AddressLength, AddrSize; PVOID Addr; - SOCKADDR_IN Address; + SOCKADDR_IN6 Address; INT ErrorCode = ERROR_SUCCESS; + DPRINT("GetNameInfoW: %p, %d, %p, %ld, %p, %ld, %d\n", + pSockaddr, + SockaddrLength, + pNodeBuffer, + NodeBufferSize, + pServiceBuffer, + ServiceBufferSize, + Flags); + /* Check for valid socket */ - if (!pSockaddr) return EAI_FAIL; - + if (!pSockaddr) + return WSAEFAULT; + /* Check which family this is */ if (pSockaddr->sa_family == AF_INET) { @@ -902,8 +912,9 @@ GetNameInfoW(IN CONST SOCKADDR *pSockaddr, } /* Check for valid socket adress length */ - if ((DWORD)SockaddrLength < AddressLength) return EAI_FAIL; - + if ((DWORD)SockaddrLength < AddressLength) + return WSAEFAULT; + /* Check if we have a node name */ if (pNodeBuffer) { @@ -934,7 +945,16 @@ GetNameInfoW(IN CONST SOCKADDR *pSockaddr, RtlMoveMemory(&Address, pSockaddr, AddressLength); /* Get the numeric address */ - Address.sin_port = 0; + if (pSockaddr->sa_family == AF_INET) + { + /* IPv4 */ + ((PSOCKADDR_IN)&Address)->sin_port = 0; + } + else if (pSockaddr->sa_family == AF_INET6) + { + /* IPv6 */ + ((PSOCKADDR_IN6)&Address)->sin6_port = 0; + } ErrorCode = WSAAddressToStringW((LPSOCKADDR)&Address, AddressLength, NULL,