From da16d6b66003f05e39c92897bb973f4b79fce7e3 Mon Sep 17 00:00:00 2001 From: Bruno Jesus <00cpxxx@gmail.com> Date: Fri, 14 Feb 2014 08:44:21 -0200 Subject: [PATCH] ws2_32: Fix edge case for getaddrinfo in BSD and OSX. --- dlls/ws2_32/socket.c | 3 +++ dlls/ws2_32/tests/sock.c | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 7a9440fadd8..a9ac79d4c5e 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -5466,6 +5466,9 @@ int WINAPI WS_getaddrinfo(LPCSTR nodename, LPCSTR servname, const struct WS_addr else node = nodename; + /* servname tweak required by OSX and BSD kernels */ + if (servname && !servname[0]) servname = "0"; + if (hints) { punixhints = &unixhints; diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index cb67533b53a..e1465487552 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -5401,12 +5401,24 @@ static void test_GetAddrInfoW(void) ok(result != NULL, "GetAddrInfoW failed\n"); pFreeAddrInfoW(result); + result = NULL; + ret = pGetAddrInfoW(NULL, empty, NULL, &result); + ok(!ret, "GetAddrInfoW failed with %d\n", WSAGetLastError()); + ok(result != NULL, "GetAddrInfoW failed\n"); + pFreeAddrInfoW(result); + result = NULL; ret = pGetAddrInfoW(empty, zero, NULL, &result); ok(!ret, "GetAddrInfoW failed with %d\n", WSAGetLastError()); ok(result != NULL, "GetAddrInfoW failed\n"); pFreeAddrInfoW(result); + result = NULL; + ret = pGetAddrInfoW(empty, empty, NULL, &result); + ok(!ret, "GetAddrInfoW failed with %d\n", WSAGetLastError()); + ok(result != NULL, "GetAddrInfoW failed\n"); + pFreeAddrInfoW(result); + result = NULL; ret = pGetAddrInfoW(localhost, NULL, NULL, &result); ok(!ret, "GetAddrInfoW failed with %d\n", WSAGetLastError()); @@ -5528,12 +5540,24 @@ static void test_getaddrinfo(void) ok(result != NULL, "getaddrinfo failed\n"); pfreeaddrinfo(result); + result = NULL; + ret = pgetaddrinfo(NULL, "", NULL, &result); + ok(!ret, "getaddrinfo failed with %d\n", WSAGetLastError()); + ok(result != NULL, "getaddrinfo failed\n"); + pfreeaddrinfo(result); + result = NULL; ret = pgetaddrinfo("", "0", NULL, &result); ok(!ret, "getaddrinfo failed with %d\n", WSAGetLastError()); ok(result != NULL, "getaddrinfo failed\n"); pfreeaddrinfo(result); + result = NULL; + ret = pgetaddrinfo("", "", NULL, &result); + ok(!ret, "getaddrinfo failed with %d\n", WSAGetLastError()); + ok(result != NULL, "getaddrinfo failed\n"); + pfreeaddrinfo(result); + result = NULL; ret = pgetaddrinfo("localhost", NULL, NULL, &result); ok(!ret, "getaddrinfo failed with %d\n", WSAGetLastError());