You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/11/05 14:26:29 UTC

[commons-jcs] branch master updated: Guard against null return value from java.net.NetworkInterface.getNetworkInterfaces().

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jcs.git


The following commit(s) were added to refs/heads/master by this push:
     new 28af86f  Guard against null return value from java.net.NetworkInterface.getNetworkInterfaces().
28af86f is described below

commit 28af86f15dea1467b8b91a0353ca1355bae8325b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Nov 5 09:26:24 2020 -0500

    Guard against null return value from
    java.net.NetworkInterface.getNetworkInterfaces().
---
 .../commons/jcs3/utils/net/HostNameUtil.java       | 64 ++++++++++++----------
 .../BasicRemoteCacheClientServerUnitTest.java      | 27 +++++----
 2 files changed, 50 insertions(+), 41 deletions(-)

diff --git a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/net/HostNameUtil.java b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/net/HostNameUtil.java
index 863388b..b6f2b1f 100644
--- a/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/net/HostNameUtil.java
+++ b/commons-jcs-core/src/main/java/org/apache/commons/jcs3/utils/net/HostNameUtil.java
@@ -111,27 +111,31 @@ public class HostNameUtil
         {
             InetAddress candidateAddress = null;
             // Iterate all NICs (network interface cards)...
-            for ( Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); )
+            Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
+            if ( ifaces != null ) 
             {
-                NetworkInterface iface = ifaces.nextElement();
-                // Iterate all IP addresses assigned to each card...
-                for ( Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); )
+                while ( ifaces.hasMoreElements() )
                 {
-                    InetAddress inetAddr = inetAddrs.nextElement();
-                    if ( !inetAddr.isLoopbackAddress() )
+                    NetworkInterface iface = ifaces.nextElement();
+                    // Iterate all IP addresses assigned to each card...
+                    for ( Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); )
                     {
-                        if ( inetAddr.isSiteLocalAddress() )
+                        InetAddress inetAddr = inetAddrs.nextElement();
+                        if ( !inetAddr.isLoopbackAddress() )
                         {
-                            // Found non-loopback site-local address. Return it immediately...
-                            return inetAddr;
-                        }
-                        else if ( candidateAddress == null )
-                        {
-                            // Found non-loopback address, but not necessarily site-local.
-                            // Store it as a candidate to be returned if site-local address is not subsequently found...
-                            candidateAddress = inetAddr;
-                            // Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
-                            // only the first. For subsequent iterations, candidate will be non-null.
+                            if ( inetAddr.isSiteLocalAddress() )
+                            {
+                                // Found non-loopback site-local address. Return it immediately...
+                                return inetAddr;
+                            }
+                            else if ( candidateAddress == null )
+                            {
+                                // Found non-loopback address, but not necessarily site-local.
+                                // Store it as a candidate to be returned if site-local address is not subsequently found...
+                                candidateAddress = inetAddr;
+                                // Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
+                                // only the first. For subsequent iterations, candidate will be non-null.
+                            }
                         }
                     }
                 }
@@ -172,20 +176,22 @@ public class HostNameUtil
     public static NetworkInterface getMulticastNetworkInterface() throws SocketException
     {
         Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
-        while (networkInterfaces.hasMoreElements())
-        {
-            NetworkInterface networkInterface = networkInterfaces.nextElement();
-            Enumeration<InetAddress> addressesFromNetworkInterface = networkInterface.getInetAddresses();
-            while (addressesFromNetworkInterface.hasMoreElements())
+        if (networkInterfaces != null) {
+            while (networkInterfaces.hasMoreElements())
             {
-                InetAddress inetAddress = addressesFromNetworkInterface.nextElement();
-                if (inetAddress.isSiteLocalAddress()
-                        && !inetAddress.isAnyLocalAddress()
-                        && !inetAddress.isLinkLocalAddress()
-                        && !inetAddress.isLoopbackAddress()
-                        && !inetAddress.isMulticastAddress())
+                NetworkInterface networkInterface = networkInterfaces.nextElement();
+                Enumeration<InetAddress> addressesFromNetworkInterface = networkInterface.getInetAddresses();
+                while (addressesFromNetworkInterface.hasMoreElements())
                 {
-                    return networkInterface;
+                    InetAddress inetAddress = addressesFromNetworkInterface.nextElement();
+                    if (inetAddress.isSiteLocalAddress()
+                            && !inetAddress.isAnyLocalAddress()
+                            && !inetAddress.isLinkLocalAddress()
+                            && !inetAddress.isLoopbackAddress()
+                            && !inetAddress.isMulticastAddress())
+                    {
+                        return networkInterface;
+                    }
                 }
             }
         }
diff --git a/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java b/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
index bc8ec5a..3ef66df 100644
--- a/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
+++ b/commons-jcs-core/src/test/java/org/apache/commons/jcs3/auxiliary/remote/server/BasicRemoteCacheClientServerUnitTest.java
@@ -83,19 +83,22 @@ public class BasicRemoteCacheClientServerUnitTest extends Assert
             InetAddress ina=InetAddress.getLocalHost();
             System.out.println("InetAddress.getLocalHost()="+ina);
             // Iterate all NICs (network interface cards)...
-            for ( Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); )
-            {
-                NetworkInterface iface = ifaces.nextElement();
-                // Iterate all IP addresses assigned to each card...
-                for ( Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); )
+            Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces();
+            if ( ifaces != null ) {
+            while ( ifaces.hasMoreElements() )
                 {
-                    InetAddress inetAddr = inetAddrs.nextElement();
-                    boolean loopbackAddress = inetAddr.isLoopbackAddress();
-                    boolean siteLocalAddress = inetAddr.isSiteLocalAddress();
-                    System.out.println("Found: "+ inetAddr +
-                            " isLoopback: " + loopbackAddress +
-                            " isSiteLocal: " + siteLocalAddress +
-                            ((!loopbackAddress && siteLocalAddress) ? " *" : ""));
+                    NetworkInterface iface = ifaces.nextElement();
+                    // Iterate all IP addresses assigned to each card...
+                    for ( Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); )
+                    {
+                        InetAddress inetAddr = inetAddrs.nextElement();
+                        boolean loopbackAddress = inetAddr.isLoopbackAddress();
+                        boolean siteLocalAddress = inetAddr.isSiteLocalAddress();
+                        System.out.println("Found: "+ inetAddr +
+                                " isLoopback: " + loopbackAddress +
+                                " isSiteLocal: " + siteLocalAddress +
+                                ((!loopbackAddress && siteLocalAddress) ? " *" : ""));
+                    }
                 }
             }
         } catch (Exception e) {