Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions lib/ipaddr.rb
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ def _ipv4_compat? # :nodoc:
# into an IPv4-mapped IPv6 address.
def ipv4_mapped
if !ipv4?
raise InvalidAddressError, "not an IPv4 address: #{@addr}"
raise InvalidAddressError, "not an IPv4 address: #{to_s}"
end
clone = self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
Expand All @@ -380,7 +380,7 @@ def ipv4_mapped
def ipv4_compat
warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
if !ipv4?
raise InvalidAddressError, "not an IPv4 address: #{@addr}"
raise InvalidAddressError, "not an IPv4 address: #{to_s}"
end
clone = self.clone.set(@addr, Socket::AF_INET6)
clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
Expand Down Expand Up @@ -413,15 +413,15 @@ def reverse
# Returns a string for DNS reverse lookup compatible with RFC3172.
def ip6_arpa
if !ipv6?
raise InvalidAddressError, "not an IPv6 address: #{@addr}"
raise InvalidAddressError, "not an IPv6 address: #{to_s}"
end
return _reverse + ".ip6.arpa"
end

# Returns a string for DNS reverse lookup compatible with RFC1886.
def ip6_int
if !ipv6?
raise InvalidAddressError, "not an IPv6 address: #{@addr}"
raise InvalidAddressError, "not an IPv6 address: #{to_s}"
end
return _reverse + ".ip6.int"
end
Expand Down Expand Up @@ -743,19 +743,19 @@ def in6_addr(left)
right = ''
when RE_IPV6ADDRLIKE_COMPRESSED
if $4
left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{@addr}"
left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{left}"
addr = in_addr($~[4,4])
left = $1
right = $3 + '0:0'
else
left.count(':') <= ($1.empty? || $2.empty? ? 8 : 7) or
raise InvalidAddressError, "invalid address: #{@addr}"
raise InvalidAddressError, "invalid address: #{left}"
left = $1
right = $2
addr = 0
end
else
raise InvalidAddressError, "invalid address: #{@addr}"
raise InvalidAddressError, "invalid address: #{left}"
end
l = left.split(':')
r = right.split(':')
Expand Down
27 changes: 25 additions & 2 deletions test/test_ipaddr.rb
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,15 @@ def test_ipv4_compat
assert_equal(112, b.prefix)
end

def test_ipv4_compat_with_error_message
e = assert_raise(IPAddr::InvalidAddressError) do
assert_warning(/obsolete/) {
IPAddr.new('2001:db8::').ipv4_compat
}
end
assert_equal('not an IPv4 address: 2001:db8::', e.message)
end

def test_ipv4_mapped
a = IPAddr.new("::ffff:192.168.1.2")
assert_equal("::ffff:192.168.1.2", a.to_s)
Expand All @@ -224,23 +233,32 @@ def test_ipv4_mapped
assert_equal(Socket::AF_INET6, b.family)
end

def test_ipv4_mapped_with_error_message
e = assert_raise(IPAddr::InvalidAddressError) do
IPAddr.new('2001:db8::').ipv4_mapped
end
assert_equal('not an IPv4 address: 2001:db8::', e.message)
end

def test_reverse
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").reverse)
assert_equal("1.2.168.192.in-addr.arpa", IPAddr.new("192.168.2.1").reverse)
end

def test_ip6_arpa
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").ip6_arpa)
assert_raise(IPAddr::InvalidAddressError) {
e = assert_raise(IPAddr::InvalidAddressError) {
IPAddr.new("192.168.2.1").ip6_arpa
}
assert_equal('not an IPv6 address: 192.168.2.1', e.message)
end

def test_ip6_int
assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.int", IPAddr.new("3ffe:505:2::f").ip6_int)
assert_raise(IPAddr::InvalidAddressError) {
e = assert_raise(IPAddr::InvalidAddressError) {
IPAddr.new("192.168.2.1").ip6_int
}
assert_equal('not an IPv6 address: 192.168.2.1', e.message)
end

def test_prefix_writer
Expand Down Expand Up @@ -631,5 +649,10 @@ def test_raises_invalid_address_error_with_error_message
IPAddr.new('192.168.01.100')
end
assert_equal('zero-filled number in IPv4 address is ambiguous: 192.168.01.100', e.message)

e = assert_raise(IPAddr::InvalidAddressError) do
IPAddr.new('INVALID')
end
assert_equal('invalid address: INVALID', e.message)
end
end