iphlpapi: Fix GetAdaptersAddresses return values.

This commit is contained in:
Timo Teräs 2010-12-27 09:56:21 +02:00 committed by Alexandre Julliard
parent 8dceb07620
commit bfc8832ccb
2 changed files with 18 additions and 8 deletions

View File

@ -1115,10 +1115,13 @@ ULONG WINAPI GetAdaptersAddresses(ULONG family, ULONG flags, PVOID reserved,
{ {
if (aa->IfType != IF_TYPE_SOFTWARE_LOOPBACK && aa->OperStatus == IfOperStatusUp) if (aa->IfType != IF_TYPE_SOFTWARE_LOOPBACK && aa->OperStatus == IfOperStatusUp)
aa->DnsSuffix = dnsSuffix; aa->DnsSuffix = dnsSuffix;
else
aa->DnsSuffix = (WCHAR *)((BYTE*)dnsSuffix + dns_suffix_size - 2);
} }
ret = ERROR_SUCCESS; ret = ERROR_SUCCESS;
} }
if (*buflen < total_size) ret = ERROR_BUFFER_OVERFLOW; else
ret = ERROR_BUFFER_OVERFLOW;
*buflen = total_size; *buflen = total_size;
TRACE("num adapters %u\n", table->numIndexes); TRACE("num adapters %u\n", table->numIndexes);

View File

@ -819,7 +819,7 @@ static void testWin2KFunctions(void)
static void test_GetAdaptersAddresses(void) static void test_GetAdaptersAddresses(void)
{ {
ULONG ret, size; ULONG ret, size;
IP_ADAPTER_ADDRESSES *aa; IP_ADAPTER_ADDRESSES *aa, *ptr;
IP_ADAPTER_UNICAST_ADDRESS *ua; IP_ADAPTER_UNICAST_ADDRESS *ua;
if (!gGetAdaptersAddresses) if (!gGetAdaptersAddresses)
@ -831,17 +831,25 @@ static void test_GetAdaptersAddresses(void)
ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, NULL); ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, NULL);
ok(ret == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", ret); ok(ret == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", ret);
size = 0; /* size should be ignored and overwritten if buffer is NULL */
size = 0x7fffffff;
ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, &size); ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, &size);
ok(ret == ERROR_BUFFER_OVERFLOW, "expected ERROR_BUFFER_OVERFLOW, got %u\n", ret); ok(ret == ERROR_BUFFER_OVERFLOW, "expected ERROR_BUFFER_OVERFLOW, got %u\n", ret);
if (ret != ERROR_BUFFER_OVERFLOW) return; if (ret != ERROR_BUFFER_OVERFLOW) return;
aa = HeapAlloc(GetProcessHeap(), 0, size); ptr = HeapAlloc(GetProcessHeap(), 0, size);
ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, aa, &size); ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, ptr, &size);
ok(!ret, "expected ERROR_SUCCESS got %u\n", ret); ok(!ret, "expected ERROR_SUCCESS got %u\n", ret);
while (!ret && winetest_debug > 1 && aa) for (aa = ptr; !ret && aa; aa = aa->Next)
{ {
ok(aa->DnsSuffix != NULL, "DnsSuffix is not a valid pointer\n");
ok(aa->Description != NULL, "Description is not a valid pointer\n");
ok(aa->FriendlyName != NULL, "FriendlyName is not a valid pointer\n");
if (winetest_debug <= 1)
continue;
trace("Length: %u\n", S(U(*aa)).Length); trace("Length: %u\n", S(U(*aa)).Length);
trace("IfIndex: %u\n", S(U(*aa)).IfIndex); trace("IfIndex: %u\n", S(U(*aa)).IfIndex);
trace("Next: %p\n", aa->Next); trace("Next: %p\n", aa->Next);
@ -877,9 +885,8 @@ static void test_GetAdaptersAddresses(void)
trace("IfType: %u\n", aa->IfType); trace("IfType: %u\n", aa->IfType);
trace("OperStatus: %u\n", aa->OperStatus); trace("OperStatus: %u\n", aa->OperStatus);
trace("\n"); trace("\n");
aa = aa->Next;
} }
HeapFree(GetProcessHeap(), 0, aa); HeapFree(GetProcessHeap(), 0, ptr);
} }
START_TEST(iphlpapi) START_TEST(iphlpapi)