summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ipaddr.rb5
-rw-r--r--test/test_ipaddr.rb17
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb
index 7fff54b9d0..6fe6c1f318 100644
--- a/lib/ipaddr.rb
+++ b/lib/ipaddr.rb
@@ -112,13 +112,12 @@ class IPAddr
def self.ntop(addr)
case addr.size
when 4
- s = addr.unpack('C4').join('.')
+ addr.unpack('C4').join('.')
when 16
- s = IN6FORMAT % addr.unpack('n8')
+ IN6FORMAT % addr.unpack('n8')
else
raise AddressFamilyError, "unsupported address family"
end
- return s
end
# Returns a new ipaddr built by bitwise AND.
diff --git a/test/test_ipaddr.rb b/test/test_ipaddr.rb
index 7b3a199bf3..e2243dc542 100644
--- a/test/test_ipaddr.rb
+++ b/test/test_ipaddr.rb
@@ -116,6 +116,23 @@ class TC_IPAddr < Test::Unit::TestCase
assert_equal("192.168.2.1", IPAddr.new_ntoh(a.hton).to_s)
end
+ def test_ntop
+ # IPv4
+ assert_equal("192.168.1.1", IPAddr.ntop("\xC0\xA8\x01\x01"))
+ # IPv6
+ assert_equal("0000:0000:0000:0000:0000:0000:0000:0001",
+ IPAddr.ntop("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"))
+
+ # Invalid parameters
+ assert_raise(IPAddr::AddressFamilyError) {
+ IPAddr.ntop("192.168.1.1")
+ }
+
+ assert_raise(IPAddr::AddressFamilyError) {
+ IPAddr.ntop("\xC0\xA8\x01\xFF1")
+ }
+ end
+
def test_ipv4_compat
a = IPAddr.new("::192.168.1.2")
assert_equal("::192.168.1.2", a.to_s)