From 92b8ca8eab73fbbd37b00debc184ef68152a9f56 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 12 Oct 2025 18:18:12 +0200 Subject: [PATCH] [IPHLPAPI] Fix GetAdaptersAddresses - Simplify the way unicast addresses are returned - Return proper prefix addresses --- dll/win32/iphlpapi/address.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dll/win32/iphlpapi/address.c b/dll/win32/iphlpapi/address.c index 1ad0d9635d5..de091ec4d41 100644 --- a/dll/win32/iphlpapi/address.c +++ b/dll/win32/iphlpapi/address.c @@ -940,7 +940,7 @@ GetAdaptersAddresses( UnicastAddress->Address.iSockaddrLength = sizeof(SOCKADDR); UnicastAddress->Address.lpSockaddr->sa_family = AF_INET; ((LPSOCKADDR_IN)UnicastAddress->Address.lpSockaddr)->sin_port = 0; - memcpy(&((LPSOCKADDR_IN)UnicastAddress->Address.lpSockaddr)->sin_addr, &AddrEntries[j].iae_addr, sizeof(AddrEntries[j].iae_addr)); + ((LPSOCKADDR_IN)UnicastAddress->Address.lpSockaddr)->sin_addr.S_un.S_addr = AddrEntries[j].iae_addr; CurrentAA->FirstUnicastAddress = UnicastAddress; Ptr += Size; @@ -968,7 +968,7 @@ GetAdaptersAddresses( Prefix->Address.iSockaddrLength = sizeof(SOCKADDR); Prefix->Address.lpSockaddr->sa_family = AF_INET; ((LPSOCKADDR_IN)Prefix->Address.lpSockaddr)->sin_port = 0; - memcpy(&((LPSOCKADDR_IN)Prefix->Address.lpSockaddr)->sin_addr, &AddrEntries[j].iae_addr, sizeof(AddrEntries[j].iae_addr)); + ((LPSOCKADDR_IN)Prefix->Address.lpSockaddr)->sin_addr.S_un.S_addr = AddrEntries[j].iae_addr & AddrEntries[j].iae_mask; /* Compute the prefix size */ Prefix->PrefixLength = CountPrefixBits(AddrEntries[j].iae_mask);