From 79cd3db24c49c45d11fa3103de57181b03204191 Mon Sep 17 00:00:00 2001 From: dmiller Date: Wed, 8 Feb 2023 22:01:36 +0000 Subject: [PATCH] Fix arp cache lookup for Windows: avoid MIB_IPNET_TYPE_INVALID --- libdnet-stripped/src/arp-win32.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libdnet-stripped/src/arp-win32.c b/libdnet-stripped/src/arp-win32.c index 44348042e..9509641ec 100644 --- a/libdnet-stripped/src/arp-win32.c +++ b/libdnet-stripped/src/arp-win32.c @@ -123,11 +123,14 @@ arp_loop(arp_t *arp, arp_handler callback, void *arg) entry.arp_ha.addr_bits = ETH_ADDR_BITS; for (i = 0; i < (int)arp->iptable->dwNumEntries; i++) { - if (arp->iptable->table[i].dwPhysAddrLen != ETH_ADDR_LEN) + MIB_IP_NETROW_LH *row = &arp->iptable->table[i]; + if (row->dwPhysAddrLen != ETH_ADDR_LEN || + (row->Type != MIB_IPNET_TYPE_DYNAMIC && + row->Type != MIB_IPNET_TYPE_STATIC)) continue; - entry.arp_pa.addr_ip = arp->iptable->table[i].dwAddr; + entry.arp_pa.addr_ip = row->dwAddr; memcpy(&entry.arp_ha.addr_eth, - arp->iptable->table[i].bPhysAddr, ETH_ADDR_LEN); + row->bPhysAddr, ETH_ADDR_LEN); if ((ret = (*callback)(&entry, arg)) != 0) return (ret);