[PATCH v2 2/2] iphlpapi: Fix the IPv4 address network order for comparisons.

Francois Gouget fgouget at codeweavers.com
Tue Feb 15 08:31:14 CST 2022


ipaddrrow_cmp() and ipforward_row_cmp() must perform byte-swapping in
order for the rows to be sorted as expected.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
v2: Introduce DWORD_cmp() to simplify the comparisons.

Relatedly, the byte order was fixed in compareUdpRow() inetmib1 for bug 
52224:
https://bugs.winehq.org/show_bug.cgi?id=52224

There is no specific test for this but adding traces showed that
the other two comparison functions were also operating on the wrong
byte order.
---
 dlls/iphlpapi/iphlpapi_main.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 2a8086292b9..fd19b83937c 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -1928,7 +1928,7 @@ done:
 static int ipaddrrow_cmp( const void *a, const void *b )
 {
     const MIB_IPADDRROW *rowA = a, *rowB = b;
-    return DWORD_cmp(rowA->dwAddr, rowB->dwAddr);
+    return DWORD_cmp(RtlUlongByteSwap( rowA->dwAddr ), RtlUlongByteSwap( rowB->dwAddr ));
 }
 
 /******************************************************************
@@ -2034,10 +2034,10 @@ DWORD WINAPI AllocateAndGetIpAddrTableFromStack( MIB_IPADDRTABLE **table, BOOL s
 static int ipforward_row_cmp( const void *a, const void *b )
 {
     const MIB_IPFORWARDROW *rowA = a, *rowB = b;
-    return DWORD_cmp(rowA->dwForwardDest, rowB->dwForwardDest) ||
+    return DWORD_cmp(RtlUlongByteSwap( rowA->dwForwardDest ), RtlUlongByteSwap( rowB->dwForwardDest )) ||
            DWORD_cmp(rowA->dwForwardProto, rowB->dwForwardProto) ||
            DWORD_cmp(rowA->dwForwardPolicy, rowB->dwForwardPolicy) ||
-           DWORD_cmp(rowA->dwForwardNextHop, rowB->dwForwardNextHop);
+           DWORD_cmp(RtlUlongByteSwap( rowA->dwForwardNextHop ), RtlUlongByteSwap( rowB->dwForwardNextHop ));
 }
 
 /******************************************************************
-- 
2.30.2



More information about the wine-devel mailing list