summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/uri/generic.rb4
-rw-r--r--test/uri/test_generic.rb4
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb
index 7de62b66db..cfa0de6b74 100644
--- a/lib/uri/generic.rb
+++ b/lib/uri/generic.rb
@@ -643,7 +643,7 @@ module URI
#
def hostname
v = self.host
- /\A\[(.*)\]\z/ =~ v ? $1 : v
+ v&.start_with?('[') && v.end_with?(']') ? v[1..-2] : v
end
# Sets the host part of the URI as the argument with brackets for IPv6 addresses.
@@ -659,7 +659,7 @@ module URI
# it is wrapped with brackets.
#
def hostname=(v)
- v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v
+ v = "[#{v}]" if !(v&.start_with?('[') && v&.end_with?(']')) && v&.index(':')
self.host = v
end
diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb
index b449a0a0d1..d122587031 100644
--- a/test/uri/test_generic.rb
+++ b/test/uri/test_generic.rb
@@ -799,8 +799,12 @@ class URI::TestGeneric < Test::Unit::TestCase
u = URI("http://foo/bar")
assert_equal("http://foo/bar", u.to_s)
+ u.hostname = "[::1]"
+ assert_equal("http://[::1]/bar", u.to_s)
u.hostname = "::1"
assert_equal("http://[::1]/bar", u.to_s)
+ u.hostname = ""
+ assert_equal("http:///bar", u.to_s)
end
def test_build