Skip to content
Snippets Groups Projects
Commit be71e502 authored by Ignatius Reza's avatar Ignatius Reza
Browse files

::1 should be detected as a valid loopback ip.

parent b05f1f73
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,7 @@ module Geocoder ...@@ -2,7 +2,7 @@ module Geocoder
class IpAddress < String class IpAddress < String
def loopback? def loopback?
valid? and (self == "0.0.0.0" or self.match(/\A127\./)) valid? and (self == "0.0.0.0" or self.match(/\A127\./) or self == "::1")
end end
def valid? def valid?
...@@ -11,6 +11,8 @@ module Geocoder ...@@ -11,6 +11,8 @@ module Geocoder
((::ffff:)?((\d{1,3})\.){3}\d{1,3}) # Check for IPv4 ((::ffff:)?((\d{1,3})\.){3}\d{1,3}) # Check for IPv4
| # .... Or | # .... Or
(\S+?(:\S+?){6}\S+) # Check for IPv6 (\S+?(:\S+?){6}\S+) # Check for IPv6
| # .... Or
(::1) # IPv6 loopback
)\z )\z
}x }x
!!self.match(ipregex) !!self.match(ipregex)
......
...@@ -9,6 +9,7 @@ class IpAddressTest < GeocoderTestCase ...@@ -9,6 +9,7 @@ class IpAddressTest < GeocoderTestCase
assert Geocoder::IpAddress.new("666.65.123.94").valid? # technically invalid assert Geocoder::IpAddress.new("666.65.123.94").valid? # technically invalid
assert Geocoder::IpAddress.new("::ffff:12.34.56.78").valid? assert Geocoder::IpAddress.new("::ffff:12.34.56.78").valid?
assert Geocoder::IpAddress.new("3ffe:0b00:0000:0000:0001:0000:0000:000a").valid? assert Geocoder::IpAddress.new("3ffe:0b00:0000:0000:0001:0000:0000:000a").valid?
assert Geocoder::IpAddress.new("::1").valid?
assert !Geocoder::IpAddress.new("232.65.123.94.43").valid? assert !Geocoder::IpAddress.new("232.65.123.94.43").valid?
assert !Geocoder::IpAddress.new("232.65.123").valid? assert !Geocoder::IpAddress.new("232.65.123").valid?
assert !Geocoder::IpAddress.new("::ffff:123.456.789").valid? assert !Geocoder::IpAddress.new("::ffff:123.456.789").valid?
...@@ -18,6 +19,7 @@ class IpAddressTest < GeocoderTestCase ...@@ -18,6 +19,7 @@ class IpAddressTest < GeocoderTestCase
def test_loopback def test_loopback
assert Geocoder::IpAddress.new("0.0.0.0").loopback? assert Geocoder::IpAddress.new("0.0.0.0").loopback?
assert Geocoder::IpAddress.new("127.0.0.1").loopback? assert Geocoder::IpAddress.new("127.0.0.1").loopback?
assert Geocoder::IpAddress.new("::1").loopback?
assert !Geocoder::IpAddress.new("232.65.123.234").loopback? assert !Geocoder::IpAddress.new("232.65.123.234").loopback?
assert !Geocoder::IpAddress.new("127 Main St.").loopback? assert !Geocoder::IpAddress.new("127 Main St.").loopback?
assert !Geocoder::IpAddress.new("John Doe\n127 Main St.\nAnywhere, USA").loopback? assert !Geocoder::IpAddress.new("John Doe\n127 Main St.\nAnywhere, USA").loopback?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment