NET-641 SubnetUtils.SubnetInfo.isInRange("0.0.0.0") returns true for CIDR/31, 32

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/net/trunk@1804012 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f1db606..d23b05f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -74,6 +74,9 @@
  The examples are not part of the public API, so this does not affect compatibility.
 
 ">
+            <action issue="NET-641" type="fix" dev="sebb" due-to="pin_ptr">
+            SubnetUtils.SubnetInfo.isInRange("0.0.0.0") returns true for CIDR/31, 32
+            </action>
             <action issue="NET-638" type="add" dev="sebb" due-to="Daniel Leong">
             Telnet subnegotiations hard-limited to 512 bytes - allow override
             </action>
diff --git a/src/main/java/org/apache/commons/net/util/SubnetUtils.java b/src/main/java/org/apache/commons/net/util/SubnetUtils.java
index 4de394d..f18f2c6 100644
--- a/src/main/java/org/apache/commons/net/util/SubnetUtils.java
+++ b/src/main/java/org/apache/commons/net/util/SubnetUtils.java
@@ -157,12 +157,17 @@
         }
 
         /**
-         *
+         * Returns true if the parameter <code>address</code> is in the
+         * range of usable endpoint addresses for this subnet. This excludes the
+         * network and broadcast addresses.
          * @param address the address to check
          * @return true if it is in range
          * @since 3.4 (made public)
          */
         public boolean isInRange(int address) {
+            if (address == 0) { // cannot ever be in range; rejecting now avoids problems with CIDR/31,32
+                return false;
+            }
             long addLong = address & UNSIGNED_INT_MASK;
             long lowLong = low() & UNSIGNED_INT_MASK;
             long highLong = high() & UNSIGNED_INT_MASK;
diff --git a/src/test/java/org/apache/commons/net/SubnetUtilsTest.java b/src/test/java/org/apache/commons/net/SubnetUtilsTest.java
index a56e9cd..82ddcde 100644
--- a/src/test/java/org/apache/commons/net/SubnetUtilsTest.java
+++ b/src/test/java/org/apache/commons/net/SubnetUtilsTest.java
@@ -368,4 +368,11 @@
         utils.setInclusiveHostCount(false);
         assertTrue(info.isInRange("127.0.0.0"));
     }
+
+    public void testNET641() {
+        assertFalse(new SubnetUtils("192.168.1.0/00").getInfo().isInRange("0.0.0.0"));
+        assertFalse(new SubnetUtils("192.168.1.0/30").getInfo().isInRange("0.0.0.0"));
+        assertFalse(new SubnetUtils("192.168.1.0/31").getInfo().isInRange("0.0.0.0"));
+        assertFalse(new SubnetUtils("192.168.1.0/32").getInfo().isInRange("0.0.0.0"));
+    }
 }