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 <[email protected]>
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) {

Reply via email to