From b5625c05d04c7c886192ba9c3e8ed7c0b05ea482 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 10 Nov 2015 14:00:22 +0100 Subject: [PATCH 1/9] CID-1175714 casts before bit shift --- .../rdpconsole/src/main/java/streamer/ByteBuffer.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java index e307342bdbe..46f0ee95870 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java @@ -418,7 +418,10 @@ public class ByteBuffer { } protected static long calculateUnsignedInt(byte value1, byte value2, byte value3, byte value4) { - return (calculateUnsignedByte(value1) << 24) + (calculateUnsignedByte(value2) << 16) + (calculateUnsignedByte(value3) << 8) + calculateUnsignedByte(value4); + return (((long)calculateUnsignedByte(value1)) << 24) + + (((long)calculateUnsignedByte(value2)) << 16) + + (((long)calculateUnsignedByte(value3)) << 8) + + calculateUnsignedByte(value4); } /** From 637afb9b6740134b70d40ba8df4e93e36ded5b42 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 10 Nov 2015 14:16:49 +0100 Subject: [PATCH 2/9] CID-1116485: cast cidr during bit shifting and simple test included --- utils/src/main/java/com/cloud/utils/net/NetUtils.java | 2 +- utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index 883129b20ff..e48cf299cd8 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -775,7 +775,7 @@ public class NetUtils { } public static String getCidrSubNet(final String ip, final long cidrSize) { - final long numericNetmask = 0xffffffff >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; + final long numericNetmask = ((long)0xffffffff) >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; final String netmask = NetUtils.long2Ip(numericNetmask); return getSubNet(ip, netmask); } diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 1ab4459d6ac..d4d23b321e4 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -418,4 +418,10 @@ public class NetUtilsTest { assertTrue("It should pass! 31 bit prefix.", is31PrefixCidr); } + @Test + public void testGetCidrSubNet() { + final String cidr = "10.10.0.0/16"; + String subnet = NetUtils.getCidrSubNet("10.10.10.10", 16); + assertTrue(NetUtils.isIpWithtInCidrRange(subnet, cidr)); + } } \ No newline at end of file From 2fadfe93dcb63693485fb44a7c5146024e232c3c Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 10 Nov 2015 14:40:24 +0100 Subject: [PATCH 3/9] CID-1116484 cast to long and use long as cidrsize type and simpel test --- utils/src/main/java/com/cloud/utils/net/NetUtils.java | 9 +++++---- .../src/test/java/com/cloud/utils/net/NetUtilsTest.java | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index e48cf299cd8..6da867d386a 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -47,6 +47,7 @@ import org.apache.log4j.Logger; import com.cloud.utils.IteratorUtil; import com.cloud.utils.Pair; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; import com.googlecode.ipv6.IPv6Address; import com.googlecode.ipv6.IPv6AddressRange; @@ -907,14 +908,14 @@ public class NetUtils { if (!isValidIp(cidrAddress)) { return null; } - int cidrSizeNum = -1; + long cidrSizeNum = -1; try { cidrSizeNum = Integer.parseInt(cidrSize); - } catch (final Exception e) { - return null; + } catch (final NumberFormatException e) { + throw new CloudRuntimeException("cidrsize is not valid", e); } - final long numericNetmask = 0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; + final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; final String netmask = NetUtils.long2Ip(numericNetmask); return getSubNet(cidrAddress, netmask); } diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index d4d23b321e4..1f948d2d032 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -418,8 +418,16 @@ public class NetUtilsTest { assertTrue("It should pass! 31 bit prefix.", is31PrefixCidr); } + @Test public void testGetCidrSubNet() { + final String cidr = "10.10.0.0/16"; + String subnet = NetUtils.getCidrSubNet("10.10.10.10/16"); + assertTrue(cidr + " does not contain " + subnet,NetUtils.isIpWithtInCidrRange(subnet, cidr)); + } + + @Test + public void testGetCidrSubNetWithWidth() { final String cidr = "10.10.0.0/16"; String subnet = NetUtils.getCidrSubNet("10.10.10.10", 16); assertTrue(NetUtils.isIpWithtInCidrRange(subnet, cidr)); From f9d5c6918cf5f0b7c5524b4c2d421c84f3eb55ab Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 10 Nov 2015 14:54:52 +0100 Subject: [PATCH 4/9] CID-1116483 cidr to netmask bitshifts guarded with casts and simple test --- utils/src/main/java/com/cloud/utils/net/NetUtils.java | 2 +- .../src/test/java/com/cloud/utils/net/NetUtilsTest.java | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index 6da867d386a..b0eb2f2faab 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -921,7 +921,7 @@ public class NetUtils { } public static String getCidrNetmask(final long cidrSize) { - final long numericNetmask = 0xffffffff >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; + final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; return long2Ip(numericNetmask); } diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 1f948d2d032..76fc4fa89fb 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -419,6 +419,13 @@ public class NetUtilsTest { assertTrue("It should pass! 31 bit prefix.", is31PrefixCidr); } + @Test + public void testGetCidrNetMask() { + final String cidr = "10.10.0.0/16"; + String netmask = NetUtils.getCidrNetmask("10.10.10.10/16"); + assertTrue(cidr + " does not generate valid netmask " + netmask,NetUtils.isValidNetmask(netmask)); + } + @Test public void testGetCidrSubNet() { final String cidr = "10.10.0.0/16"; @@ -430,6 +437,6 @@ public class NetUtilsTest { public void testGetCidrSubNetWithWidth() { final String cidr = "10.10.0.0/16"; String subnet = NetUtils.getCidrSubNet("10.10.10.10", 16); - assertTrue(NetUtils.isIpWithtInCidrRange(subnet, cidr)); + assertTrue(cidr + " does not contain " + subnet,NetUtils.isIpWithtInCidrRange(subnet, cidr)); } } \ No newline at end of file From 3ae4dd06f355ce81da4c672d1305c7707ccc6d8a Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 10 Nov 2015 16:18:52 +0100 Subject: [PATCH 5/9] CID-1116482 cidrToLong cleanup of bitshift problem and some trivial testing --- .../java/com/cloud/utils/net/NetUtils.java | 43 +++++++++++-------- .../com/cloud/utils/net/NetUtilsTest.java | 30 +++++++++++++ 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index b0eb2f2faab..28e5ab5e572 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -870,31 +870,44 @@ public class NetUtils { public static Long[] cidrToLong(final String cidr) { if (cidr == null || cidr.isEmpty()) { - return null; + throw new CloudRuntimeException("empty cidr can not be converted to longs"); } final String[] cidrPair = cidr.split("\\/"); if (cidrPair.length != 2) { - return null; + throw new CloudRuntimeException("cidr is not formatted correctly: "+ cidr); } final String cidrAddress = cidrPair[0]; final String cidrSize = cidrPair[1]; if (!isValidIp(cidrAddress)) { - return null; + throw new CloudRuntimeException("cidr is not bvalid in ip space" + cidr); } - int cidrSizeNum = -1; - - try { - cidrSizeNum = Integer.parseInt(cidrSize); - } catch (final Exception e) { - return null; - } - final long numericNetmask = 0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; + long cidrSizeNum = getCidrSizeFromString(cidrSize); + final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; final long ipAddr = ip2Long(cidrAddress); final Long[] cidrlong = {ipAddr & numericNetmask, (long)cidrSizeNum}; return cidrlong; } + /** + * @param cidrSize + * @return + * @throws CloudRuntimeException + */ + static long getCidrSizeFromString(final String cidrSize) throws CloudRuntimeException { + long cidrSizeNum = -1; + + try { + cidrSizeNum = Integer.parseInt(cidrSize); + } catch (final NumberFormatException e) { + throw new CloudRuntimeException("cidrsize is not a valid int: " + cidrSize, e); + } + if(cidrSizeNum > 32 || cidrSizeNum < 0) {// assuming IPv4 + throw new CloudRuntimeException("cidr size out of range: " + cidrSizeNum); + } + return cidrSizeNum; + } + public static String getCidrSubNet(final String cidr) { if (cidr == null || cidr.isEmpty()) { return null; @@ -908,13 +921,7 @@ public class NetUtils { if (!isValidIp(cidrAddress)) { return null; } - long cidrSizeNum = -1; - - try { - cidrSizeNum = Integer.parseInt(cidrSize); - } catch (final NumberFormatException e) { - throw new CloudRuntimeException("cidrsize is not valid", e); - } + long cidrSizeNum = getCidrSizeFromString(cidrSize); final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; final String netmask = NetUtils.long2Ip(numericNetmask); return getSubNet(cidrAddress, netmask); diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 76fc4fa89fb..64ceb72411b 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -38,6 +38,7 @@ import java.util.TreeSet; import org.apache.log4j.Logger; import org.junit.Test; +import com.cloud.utils.exception.CloudRuntimeException; import com.googlecode.ipv6.IPv6Address; public class NetUtilsTest { @@ -439,4 +440,33 @@ public class NetUtilsTest { String subnet = NetUtils.getCidrSubNet("10.10.10.10", 16); assertTrue(cidr + " does not contain " + subnet,NetUtils.isIpWithtInCidrRange(subnet, cidr)); } + + @Test + public void testIsValidCidrSize() { + final String cidrsize = "16"; + long netbits = NetUtils.getCidrSizeFromString(cidrsize); + assertTrue(" does not compute " + cidrsize,netbits == 16); + } + + @Test(expected=CloudRuntimeException.class) + public void testIsInvalidCidrSize() { + final String cidrsize = "33"; + long netbits = NetUtils.getCidrSizeFromString(cidrsize); + assertTrue(" does not compute " + cidrsize,netbits == 16); + } + + @Test(expected=CloudRuntimeException.class) + public void testIsInvalidCidrString() { + final String cidrsize = "ggg"; + long netbits = NetUtils.getCidrSizeFromString(cidrsize); + assertTrue(" does not compute " + cidrsize,netbits == 16); + } + + @Test + public void testCidrToLongArray() { + final String cidr = "10.192.10.10/10"; + Long[] netbits = NetUtils.cidrToLong(cidr); + assertEquals("unexpected cidrsize " + netbits[1],10l, netbits[1].longValue()); + assertEquals("(un)expected <" + 0x0ac00000L + "> netaddress " + netbits[0].longValue(),netbits[0].longValue(),0x0ac00000l); + } } \ No newline at end of file From 1bc837837ff39efc06f687cbb281ce97c08e4aee Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 11 Nov 2015 10:05:47 +0100 Subject: [PATCH 6/9] CWE-190 netmask as long form cidr-size as method --- .../main/java/com/cloud/utils/net/NetUtils.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index 28e5ab5e572..eeeb008a462 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -776,11 +776,19 @@ public class NetUtils { } public static String getCidrSubNet(final String ip, final long cidrSize) { - final long numericNetmask = ((long)0xffffffff) >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; + final long numericNetmask = netMaskFromCidr(cidrSize); final String netmask = NetUtils.long2Ip(numericNetmask); return getSubNet(ip, netmask); } + /** + * @param cidrSize + * @return + */ + static long netMaskFromCidr(final long cidrSize) { + return ((long)0xffffffff) >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; + } + public static String ipAndNetMaskToCidr(final String ip, final String netmask) { if (!isValidIp(ip)) { return null; @@ -882,7 +890,7 @@ public class NetUtils { throw new CloudRuntimeException("cidr is not bvalid in ip space" + cidr); } long cidrSizeNum = getCidrSizeFromString(cidrSize); - final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; + final long numericNetmask = netMaskFromCidr(cidrSizeNum); final long ipAddr = ip2Long(cidrAddress); final Long[] cidrlong = {ipAddr & numericNetmask, (long)cidrSizeNum}; return cidrlong; @@ -922,13 +930,13 @@ public class NetUtils { return null; } long cidrSizeNum = getCidrSizeFromString(cidrSize); - final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSizeNum << MAX_CIDR - cidrSizeNum; + final long numericNetmask = netMaskFromCidr(cidrSizeNum); final String netmask = NetUtils.long2Ip(numericNetmask); return getSubNet(cidrAddress, netmask); } public static String getCidrNetmask(final long cidrSize) { - final long numericNetmask = (long)0xffffffff >> MAX_CIDR - cidrSize << MAX_CIDR - cidrSize; + final long numericNetmask = netMaskFromCidr(cidrSize); return long2Ip(numericNetmask); } From 02058b939c54be8c088e57dbcc719bcfd5113ff0 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 11 Nov 2015 10:22:04 +0100 Subject: [PATCH 7/9] CWE-190 unit test for extremes of long netMaskFromCidr(long) --- .../test/java/com/cloud/utils/net/NetUtilsTest.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 64ceb72411b..a103f0a179c 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -469,4 +469,12 @@ public class NetUtilsTest { assertEquals("unexpected cidrsize " + netbits[1],10l, netbits[1].longValue()); assertEquals("(un)expected <" + 0x0ac00000L + "> netaddress " + netbits[0].longValue(),netbits[0].longValue(),0x0ac00000l); } -} \ No newline at end of file + + @Test + public void testNetmaskFromCidr() { + long mask = NetUtils.netMaskFromCidr(1l); + assertEquals("mask not right: " + mask, 0x80000000, mask); + mask = NetUtils.netMaskFromCidr(32l); + assertEquals("mask not right: " + mask, 0xffffffff, mask); + } +} From 1d6ee2dcb0364c3cc69e800cb8173cd8ac523fa8 Mon Sep 17 00:00:00 2001 From: weingartner Date: Fri, 20 Nov 2015 13:31:58 -0200 Subject: [PATCH 8/9] Changed the behavior of methods that use NetUtils.cidrToLong(String) Given that the method com.cloud.utils.net.NetUtils.cidrToLong(String) now throws an exception when receiving null or empty cidrs, there is the need to change methods that use it. Those methods were changed and test cases created. --- .../java/com/cloud/utils/net/NetUtils.java | 33 +++++++++++-------- .../com/cloud/utils/net/NetUtilsTest.java | 31 +++++++++++++++++ 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index eeeb008a462..db724f6a1f4 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -40,6 +40,7 @@ import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.SystemUtils; import org.apache.commons.net.util.SubnetUtils; import org.apache.commons.validator.routines.InetAddressValidator; @@ -838,13 +839,13 @@ public class NetUtils { } public static SupersetOrSubset isNetowrkASubsetOrSupersetOfNetworkB(final String cidrA, final String cidrB) { + if (!areCidrsNotEmpty(cidrA, cidrB)) { + return SupersetOrSubset.errorInCidrFormat; + } final Long[] cidrALong = cidrToLong(cidrA); final Long[] cidrBLong = cidrToLong(cidrB); long shift = 0; - if (cidrALong == null || cidrBLong == null) { - //implies error in the cidr format - return SupersetOrSubset.errorInCidrFormat; - } + if (cidrALong[1] >= cidrBLong[1]) { shift = MAX_CIDR - cidrBLong[1]; } else { @@ -867,15 +868,20 @@ public class NetUtils { } public static boolean isNetworkAWithinNetworkB(final String cidrA, final String cidrB) { - final Long[] cidrALong = cidrToLong(cidrA); - final Long[] cidrBLong = cidrToLong(cidrB); - if (cidrALong == null || cidrBLong == null) { + if (!areCidrsNotEmpty(cidrA, cidrB)) { return false; } - final long shift = MAX_CIDR - cidrBLong[1]; + Long[] cidrALong = cidrToLong(cidrA); + Long[] cidrBLong = cidrToLong(cidrB); + + long shift = MAX_CIDR - cidrBLong[1]; return cidrALong[0] >> shift == cidrBLong[0] >> shift; } + static boolean areCidrsNotEmpty(String cidrA, String cidrB) { + return StringUtils.isNotEmpty(cidrA) && StringUtils.isNotEmpty(cidrB); + } + public static Long[] cidrToLong(final String cidr) { if (cidr == null || cidr.isEmpty()) { throw new CloudRuntimeException("empty cidr can not be converted to longs"); @@ -887,12 +893,12 @@ public class NetUtils { final String cidrAddress = cidrPair[0]; final String cidrSize = cidrPair[1]; if (!isValidIp(cidrAddress)) { - throw new CloudRuntimeException("cidr is not bvalid in ip space" + cidr); + throw new CloudRuntimeException("cidr is not valid in ip space" + cidr); } long cidrSizeNum = getCidrSizeFromString(cidrSize); final long numericNetmask = netMaskFromCidr(cidrSizeNum); final long ipAddr = ip2Long(cidrAddress); - final Long[] cidrlong = {ipAddr & numericNetmask, (long)cidrSizeNum}; + final Long[] cidrlong = {ipAddr & numericNetmask, cidrSizeNum}; return cidrlong; } @@ -1164,11 +1170,12 @@ public class NetUtils { } public static boolean isNetworksOverlap(final String cidrA, final String cidrB) { - final Long[] cidrALong = cidrToLong(cidrA); - final Long[] cidrBLong = cidrToLong(cidrB); - if (cidrALong == null || cidrBLong == null) { + if (!areCidrsNotEmpty(cidrA, cidrB)) { return false; } + Long[] cidrALong = cidrToLong(cidrA); + Long[] cidrBLong = cidrToLong(cidrB); + final long shift = MAX_CIDR - (cidrALong[1] > cidrBLong[1] ? cidrBLong[1] : cidrALong[1]); return cidrALong[0] >> shift == cidrBLong[0] >> shift; } diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index a103f0a179c..bf686c2a241 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -39,6 +39,7 @@ import org.apache.log4j.Logger; import org.junit.Test; import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.NetUtils.SupersetOrSubset; import com.googlecode.ipv6.IPv6Address; public class NetUtilsTest { @@ -477,4 +478,34 @@ public class NetUtilsTest { mask = NetUtils.netMaskFromCidr(32l); assertEquals("mask not right: " + mask, 0xffffffff, mask); } + + @Test + public void testIsCidrsNotEmptyWithNullCidrs() { + assertEquals(false, NetUtils.areCidrsNotEmpty(null, null)); + } + + @Test + public void testIsCidrsNotEmptyWithEmptyCidrs() { + assertEquals(false, NetUtils.areCidrsNotEmpty("", " ")); + } + + @Test + public void testIsCidrsNotEmpty() { + assertEquals(true, NetUtils.areCidrsNotEmpty("10.10.0.0/16", "10.1.2.3/16")); + } + + @Test + public void testIsNetowrkASubsetOrSupersetOfNetworkBWithEmptyValues() { + assertEquals(SupersetOrSubset.errorInCidrFormat, NetUtils.isNetowrkASubsetOrSupersetOfNetworkB("", null)); + } + + @Test + public void testIsNetworkAWithinNetworkBWithEmptyValues() { + assertEquals(false, NetUtils.isNetworkAWithinNetworkB("", null)); + } + + @Test + public void testIsNetworksOverlapWithEmptyValues() { + assertEquals(false, NetUtils.isNetworksOverlap("", null)); + } } From 4b7f87b9c80b792080640a1d7a7a251e254fdc92 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sat, 21 Nov 2015 18:58:54 +0100 Subject: [PATCH 9/9] move back to original contract of isNetworksOverlap() --- .../main/java/com/cloud/utils/net/NetUtils.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java b/utils/src/main/java/com/cloud/utils/net/NetUtils.java index db724f6a1f4..90a43fa7e2a 100644 --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java @@ -1170,14 +1170,15 @@ public class NetUtils { } public static boolean isNetworksOverlap(final String cidrA, final String cidrB) { - if (!areCidrsNotEmpty(cidrA, cidrB)) { - return false; + try { + Long[] cidrALong = cidrToLong(cidrA); + Long[] cidrBLong = cidrToLong(cidrB); + final long shift = MAX_CIDR - (cidrALong[1] > cidrBLong[1] ? cidrBLong[1] : cidrALong[1]); + return cidrALong[0] >> shift == cidrBLong[0] >> shift; + } catch (CloudRuntimeException e) { + s_logger.error(e.getLocalizedMessage(),e); } - Long[] cidrALong = cidrToLong(cidrA); - Long[] cidrBLong = cidrToLong(cidrB); - - final long shift = MAX_CIDR - (cidrALong[1] > cidrBLong[1] ? cidrBLong[1] : cidrALong[1]); - return cidrALong[0] >> shift == cidrBLong[0] >> shift; + return false; } public static boolean isValidS2SVpnPolicy(final String policys) {