[PATCH v5] iphlpapi: Fix the field 'AdapterName' of IP_ADAPTER_INFO returned by GetAdaptersInfo.

Huw Davies huw at codeweavers.com
Wed Jun 16 02:40:07 CDT 2021


On Wed, Jun 16, 2021 at 09:51:21AM +0800, Yeshun Ye wrote:
> Signed-off-by: Yeshun Ye <yeyeshun at uniontech.com>
> ---
>  dlls/iphlpapi/iphlpapi_main.c  |  9 ++++++++-
>  dlls/iphlpapi/tests/iphlpapi.c | 10 ++++++++++
>  2 files changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
> index 09414d26dde..21edd9ee128 100644
> --- a/dlls/iphlpapi/iphlpapi_main.c
> +++ b/dlls/iphlpapi/iphlpapi_main.c
> @@ -706,9 +706,16 @@ DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)
>                DWORD i;
>                PIP_ADDR_STRING currentIPAddr = &ptr->IpAddressList;
>                BOOL firstIPAddr = TRUE;
> +              NET_LUID luid;
> +              GUID guid;
>  
>                /* on Win98 this is left empty, but whatever */
> -              getInterfaceNameByIndex(table->indexes[ndx], ptr->AdapterName);
> +              ConvertInterfaceIndexToLuid(table->indexes[ndx], &luid);
> +              ConvertInterfaceLuidToGuid(&luid, &guid);
> +              sprintf(ptr->AdapterName, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
> +                      guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1],
> +                      guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5],
> +                      guid.Data4[6], guid.Data4[7]);
>                getInterfaceNameByIndex(table->indexes[ndx], ptr->Description);
>                ptr->AddressLength = sizeof(ptr->Address);
>                getInterfacePhysicalByIndex(table->indexes[ndx],
> diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
> index 358084fde68..e61f2cbd382 100644
> --- a/dlls/iphlpapi/tests/iphlpapi.c
> +++ b/dlls/iphlpapi/tests/iphlpapi.c
> @@ -1115,6 +1115,9 @@ static void testGetAdaptersInfo(void)
>          ; /* no adapter's, that's okay */
>      else if (apiReturn == ERROR_BUFFER_OVERFLOW) {
>          PIP_ADAPTER_INFO ptr, buf = HeapAlloc(GetProcessHeap(), 0, len);
> +        NET_LUID luid;
> +        GUID guid;
> +        char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];

ARRAY_SIZE(ptr->AdapterName) would be a little less obscure than
MAX_ADAPTER_NAME_LENGTH + 4.

>          apiReturn = GetAdaptersInfo(buf, &len);
>          ok(apiReturn == NO_ERROR,
> @@ -1122,6 +1125,13 @@ static void testGetAdaptersInfo(void)
>             apiReturn);
>          ptr = buf;
>          while (ptr) {
> +            ConvertInterfaceIndexToLuid(ptr->Index, &luid);
> +            ConvertInterfaceLuidToGuid(&luid, &guid);
> +            sprintf(AdapterName, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
> +                    guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1],
> +                    guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5],
> +                    guid.Data4[6], guid.Data4[7]);
> +            ok(!strcasecmp(ptr->AdapterName, AdapterName), "expected '%s' got '%s'\n", ptr->AdapterName, AdapterName);

strcmp() should work here.

>              ok(ptr->IpAddressList.IpAddress.String[0], "A valid IP address must be present\n");
>              ok(ptr->IpAddressList.IpMask.String[0], "A valid mask must be present\n");
>              ok(ptr->GatewayList.IpAddress.String[0], "A valid IP address must be present\n");

A separate patch could also change the similar test in test_GetAdapterAddresses() to also use
strcmp() (with the appropriate change to the format string).

Huw.



More information about the wine-devel mailing list