ws2_32: Fix buffer size query in WSAAddressToStringW.
Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
e7dc82377b
commit
dc02bbee54
|
@ -8518,30 +8518,15 @@ INT WINAPI WSAAddressToStringW( LPSOCKADDR sockaddr, DWORD len,
|
|||
LPWSAPROTOCOL_INFOW info, LPWSTR string,
|
||||
LPDWORD lenstr )
|
||||
{
|
||||
INT ret;
|
||||
DWORD size;
|
||||
WCHAR buffer[54]; /* 32 digits + 7':' + '[' + '%" + 5 digits + ']:' + 5 digits + '\0' */
|
||||
CHAR bufAddr[54];
|
||||
INT ret;
|
||||
char buf[54]; /* 32 digits + 7':' + '[' + '%" + 5 digits + ']:' + 5 digits + '\0' */
|
||||
|
||||
TRACE( "(%p, %d, %p, %p, %p)\n", sockaddr, len, info, string, lenstr );
|
||||
|
||||
size = *lenstr;
|
||||
ret = WSAAddressToStringA(sockaddr, len, NULL, bufAddr, &size);
|
||||
if ((ret = WSAAddressToStringA(sockaddr, len, NULL, buf, lenstr))) return ret;
|
||||
|
||||
if (ret) return ret;
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, bufAddr, size, buffer, ARRAY_SIZE(buffer));
|
||||
|
||||
if (*lenstr < size)
|
||||
{
|
||||
*lenstr = size;
|
||||
SetLastError(WSAEFAULT);
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
TRACE("=> %s,%u bytes\n", debugstr_w(buffer), size);
|
||||
*lenstr = size;
|
||||
lstrcpyW( string, buffer );
|
||||
MultiByteToWideChar(CP_ACP, 0, buf, *lenstr, string, *lenstr);
|
||||
TRACE("=> %s,%u chars\n", debugstr_w(string), *lenstr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -2923,11 +2923,29 @@ static void test_WSAAddressToString(void)
|
|||
sockaddr.sin_family = AF_INET;
|
||||
sockaddr.sin_addr.s_addr = 0;
|
||||
sockaddr.sin_port = 0;
|
||||
WSASetLastError( 0xdeadbeef );
|
||||
ret = WSAAddressToStringA( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, output, &len );
|
||||
ok( ret == SOCKET_ERROR, "WSAAddressToStringA() returned %d, expected SOCKET_ERROR\n", ret );
|
||||
ok( WSAGetLastError() == WSAEFAULT, "WSAAddressToStringA() gave error %d, expected WSAEFAULT\n", WSAGetLastError() );
|
||||
ok( len == 8, "WSAAddressToStringA() gave length %d, expected 8\n", len );
|
||||
|
||||
len = 0;
|
||||
sockaddr.sin_family = AF_INET;
|
||||
sockaddr.sin_addr.s_addr = 0;
|
||||
sockaddr.sin_port = 0;
|
||||
WSASetLastError( 0xdeadbeef );
|
||||
ret = WSAAddressToStringW( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, NULL, &len );
|
||||
ok( ret == SOCKET_ERROR, "got %d\n", ret );
|
||||
ok( WSAGetLastError() == WSAEFAULT, "got %08x\n", WSAGetLastError() );
|
||||
ok( len == 8, "got %u\n", len );
|
||||
|
||||
len = ARRAY_SIZE(outputW);
|
||||
memset( outputW, 0, sizeof(outputW) );
|
||||
ret = WSAAddressToStringW( (SOCKADDR*)&sockaddr, sizeof(sockaddr), NULL, outputW, &len );
|
||||
ok( !ret, "WSAAddressToStringW() returned %d\n", ret );
|
||||
ok( len == 8, "got %u\n", len );
|
||||
ok( !wcscmp(outputW, L"0.0.0.0"), "got %s\n", wine_dbgstr_w(outputW) );
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
for (j = 0; j < ARRAY_SIZE(ipv4_tests); j++)
|
||||
|
|
Loading…
Reference in New Issue