summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbluemonk <ceresa@gmail.com>2013-10-20 15:46:59 +0200
committerbluemonk <ceresa@gmail.com>2013-10-20 15:46:59 +0200
commit1624d53bfe26c044737929db26503b99f6b76050 (patch)
treef68dfa40cf77ba25dc1df3b6df1e27a2827bd828
parent8da374226a780a1ed5bd458ef27c6c3fd4602f4d (diff)
parent1a8ce1826be6b91f6a634a47a308272d2f72c957 (diff)
downloadipaddress-develop.tar.gz
Merge branch 'brona-master' into developdevelop
-rw-r--r--lib/ipaddress.rb13
-rw-r--r--test/ipaddress/ipv6_test.rb7
-rw-r--r--test/ipaddress_test.rb2
3 files changed, 10 insertions, 12 deletions
diff --git a/lib/ipaddress.rb b/lib/ipaddress.rb
index 0b7bd00..7631952 100644
--- a/lib/ipaddress.rb
+++ b/lib/ipaddress.rb
@@ -135,15 +135,10 @@ module IPAddress
# IPAddress::valid_ipv6? "2002::DEAD::BEEF"
# #=> false
#
- def self.valid_ipv6?(addr)
- # IPv6 (normal)
- return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ addr
- return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
- return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
- # IPv6 (IPv4 compat)
- return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_ipv4?($')
- return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?($')
- return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_ipv4?($')
+ def self.valid_ipv6?(addr)
+ # https://gist.github.com/cpetschnig/294476
+ # http://forums.intermapper.com/viewtopic.php?t=452
+ return true if /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/ =~ addr
false
end
diff --git a/test/ipaddress/ipv6_test.rb b/test/ipaddress/ipv6_test.rb
index 9d9ff3e..d4c2344 100644
--- a/test/ipaddress/ipv6_test.rb
+++ b/test/ipaddress/ipv6_test.rb
@@ -31,7 +31,8 @@ class IPv6Test < Test::Unit::TestCase
"1080::8:800:200C:417A" => 21932261930451111902915077091070067066}
@invalid_ipv6 = [":1:2:3:4:5:6:7",
- ":1:2:3:4:5:6:7"]
+ ":1:2:3:4:5:6:7",
+ "2002:516:2:200"]
@networks = {
"2001:db8:1:1:1:1:1:1/32" => "2001:db8::/32",
@@ -257,7 +258,7 @@ class IPv6Test < Test::Unit::TestCase
compressed = "2001:db8:0:cd30::"
expanded = "2001:0db8:0000:cd30:0000:0000:0000:0000"
assert_equal expanded, @klass.expand(compressed)
- assert_not_equal expanded, @klass.expand("2001:0db8:0:cd3")
+ assert_not_equal expanded, @klass.expand("2001:0db8:0::cd3")
assert_not_equal expanded, @klass.expand("2001:0db8::cd30")
assert_not_equal expanded, @klass.expand("2001:0db8::cd3")
end
@@ -266,7 +267,7 @@ class IPv6Test < Test::Unit::TestCase
compressed = "2001:db8:0:cd30::"
expanded = "2001:0db8:0000:cd30:0000:0000:0000:0000"
assert_equal compressed, @klass.compress(expanded)
- assert_not_equal compressed, @klass.compress("2001:0db8:0:cd3")
+ assert_not_equal compressed, @klass.compress("2001:0db8:0::cd3")
assert_not_equal compressed, @klass.compress("2001:0db8::cd30")
assert_not_equal compressed, @klass.compress("2001:0db8::cd3")
end
diff --git a/test/ipaddress_test.rb b/test/ipaddress_test.rb
index ed72aed..8e2bb66 100644
--- a/test/ipaddress_test.rb
+++ b/test/ipaddress_test.rb
@@ -43,6 +43,8 @@ class IPAddressTest < Test::Unit::TestCase
assert_equal false, IPAddress::valid?("10.0.0")
assert_equal false, IPAddress::valid?("10.0")
assert_equal false, IPAddress::valid?("2002:::1")
+ assert_equal false, IPAddress::valid?("2002:516:2:200")
+
end
def test_module_method_valid_ipv4_netmark?