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)