A small issue was found when running JCK tests on modern Windows platforms, 
that have IPv6 enabled, but forced to run with the IPv4 Stack, 
-Djava.net.preferIPv4Stack=true. NetworkInterface.getHardwareAddress() can 
return a zero length byte array, where is should, and is specified to, return 
null.

The solution is to only create the byte array if the physical address is known. 
Running an existing regression test with -Djava.net.preferIPv4Stack=true covers 
this issue.

diff -r 5cf954b229fe src/java.base/windows/native/libnet/NetworkInterface.c
--- a/src/java.base/windows/native/libnet/NetworkInterface.c    Thu Sep 11 
15:13:37 2014 +0400
+++ b/src/java.base/windows/native/libnet/NetworkInterface.c    Thu Sep 11 
14:34:11 2014 +0100
@@ -990,9 +990,11 @@
       case MIB_IF_TYPE_FDDI:
       case IF_TYPE_IEEE80211:
         len = ifRowP->dwPhysAddrLen;
-        ret = (*env)->NewByteArray(env, len);
-        if (!IS_NULL(ret)) {
-          (*env)->SetByteArrayRegion(env, ret, 0, len, (jbyte *) 
ifRowP->bPhysAddr);
+        if (len > 0) {
+          ret = (*env)->NewByteArray(env, len);
+          if (!IS_NULL(ret)) {
+            (*env)->SetByteArrayRegion(env, ret, 0, len, (jbyte *) 
ifRowP->bPhysAddr);
+          }
         }
         break;
       }
diff -r 5cf954b229fe test/java/net/NetworkInterface/Test.java
--- a/test/java/net/NetworkInterface/Test.java  Thu Sep 11 15:13:37 2014 +0400
+++ b/test/java/net/NetworkInterface/Test.java  Thu Sep 11 14:34:11 2014 +0100
@@ -23,6 +23,8 @@

 /* @test
  * @bug 4405354 6594296
+ * @run main Test
+ * @run main/othervm -Djava.net.preferIPv4Stack=true Test
  * @summary Basic tests for NetworkInterface
  */
 import java.net.NetworkInterface;


-Chris.

Reply via email to