diff --git a/utils/src/main/java/org/zstack/utils/network/IPv6NetworkUtils.java b/utils/src/main/java/org/zstack/utils/network/IPv6NetworkUtils.java index 5d41ff8b..bc77a654 100644 --- a/utils/src/main/java/org/zstack/utils/network/IPv6NetworkUtils.java +++ b/utils/src/main/java/org/zstack/utils/network/IPv6NetworkUtils.java @@ -209,8 +209,10 @@ public static boolean isIpv6RangeOverlap(String startIp1, String endIp1, String IPv6AddressRange range1 = IPv6AddressRange.fromFirstAndLast(s1, e1); IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(s2, e2); return range1.overlaps(range2); - } catch (Exception e) { - return true; + } catch (IllegalArgumentException e) { + logger.warn(String.format("invalid IPv6 range supplied: [%s, %s], [%s, %s]", + startIp1, endIp1, startIp2, endIp2), e); + return false; } } diff --git a/utils/src/test/java/org/zstack/utils/test/TestIPv6NetworkUtilsEdgeCases.java b/utils/src/test/java/org/zstack/utils/test/TestIPv6NetworkUtilsEdgeCases.java new file mode 100644 index 00000000..f05e1e27 --- /dev/null +++ b/utils/src/test/java/org/zstack/utils/test/TestIPv6NetworkUtilsEdgeCases.java @@ -0,0 +1,29 @@ +package org.zstack.utils.test; + +import org.junit.Test; +import org.zstack.utils.network.IPv6NetworkUtils; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class TestIPv6NetworkUtilsEdgeCases { + @Test + public void testRangeOverlap() { + assertTrue(IPv6NetworkUtils.isIpv6RangeOverlap( + "2001:db8::1", "2001:db8::10", + "2001:db8::10", "2001:db8::20")); + assertFalse(IPv6NetworkUtils.isIpv6RangeOverlap( + "2001:db8::1", "2001:db8::10", + "2001:db8::11", "2001:db8::20")); + } + + @Test + public void testInvalidRangeDoesNotOverlap() { + assertFalse(IPv6NetworkUtils.isIpv6RangeOverlap( + "2001:db8::10", "2001:db8::2", + "2001:db8::1", "2001:db8::20")); + assertFalse(IPv6NetworkUtils.isIpv6RangeOverlap( + "not-an-ip", "2001:db8::2", + "2001:db8::1", "2001:db8::20")); + } +}