Hi Micahel, Jessie,

6707289: InterfaceAddress.getNetworkPrefixLength() does not conform to Javadoc

getAddrsFromAdapter (src/windows/native/java/net/NetworkInterface_winXP.c) makes an incorrect assumption that the list of IP_ADAPTER_PREFIX structures pointed to by the FirstPrefix member has a linear relationship with the IP_ADAPTER_UNICAST_ADDRESS structures pointed to by the FirstUnicastAddress member. This is incorrect.

It appears there is no guarantee about the returned IP_ADAPTER_PREFIX order, making it very difficult to determine what (if any) unicast address they relate to.

The simplest way to resolve this issue to use enumAddresses_win to determine the IPv4 addresses, and skip IPv4 addresses in getAddrsFromAdapter. enumAddresses_win is not IPv6 aware so we call getAddrsFromAdapter after to determine IPv6 addresses.

Webrev:
  http://cr.openjdk.java.net/~chegar/6707289/webrev.0/webrev/

-Chris.

Reply via email to