From 2a9929cbf8004ac335b9da3a15f9de7b321703bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nick8584946899//=E5=A1=AB=E5=86=99=E4=BA=91=E6=95=88?= =?UTF-8?q?=E5=A7=93=E5=90=8D=7E?= Date: Fri, 11 Sep 2026 13:24:21 +0800 Subject: [PATCH 1/2] utils: do not treat invalid IPv6 ranges as overlap --- .../utils/network/IPv6NetworkUtils.java | 2 +- .../test/TestIPv6NetworkUtilsEdgeCases.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 utils/src/test/java/org/zstack/utils/test/TestIPv6NetworkUtilsEdgeCases.java 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..623de865 100644 --- a/utils/src/main/java/org/zstack/utils/network/IPv6NetworkUtils.java +++ b/utils/src/main/java/org/zstack/utils/network/IPv6NetworkUtils.java @@ -210,7 +210,7 @@ public static boolean isIpv6RangeOverlap(String startIp1, String endIp1, String IPv6AddressRange range2 = IPv6AddressRange.fromFirstAndLast(s2, e2); return range1.overlaps(range2); } catch (Exception e) { - return true; + 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")); + } +} From 47d30aa385740853daa9c3dcfeb1297744088fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nick8584946899//=E5=A1=AB=E5=86=99=E4=BA=91=E6=95=88?= =?UTF-8?q?=E5=A7=93=E5=90=8D=7E?= Date: Fri, 11 Sep 2026 13:37:51 +0800 Subject: [PATCH 2/2] utils: log invalid IPv6 overlap inputs --- .../main/java/org/zstack/utils/network/IPv6NetworkUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 623de865..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,7 +209,9 @@ 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) { + } catch (IllegalArgumentException e) { + logger.warn(String.format("invalid IPv6 range supplied: [%s, %s], [%s, %s]", + startIp1, endIp1, startIp2, endIp2), e); return false; } }