* lib/uri/generic.rb (URI::Generic.build):

use hostname= to detect and wrap IPv6 hosts.
  Build is accepting URI components and users may not expect
  that a host component needs to be wrapped with square brackets
  since it's not providing a URI.
  Note: initialize with arg_check => true does not wrap IPv6 hosts.
  by Joe Rafaniello <jrafanie@redhat.com>
  https://github.com/ruby/ruby/pull/765 fix GH-765

* test/uri/test_generic.rb: Add more tests

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48666 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2014-12-01 17:36:54 +00:00
Родитель 7f411d6ed4
Коммит e1606f920b
3 изменённых файлов: 31 добавлений и 4 удалений

Просмотреть файл

@ -1,3 +1,16 @@
Tue Dec 2 02:30:25 2014 NARUSE, Yui <naruse@ruby-lang.org>
* lib/uri/generic.rb (URI::Generic.build):
use hostname= to detect and wrap IPv6 hosts.
Build is accepting URI components and users may not expect
that a host component needs to be wrapped with square brackets
since it's not providing a URI.
Note: initialize with arg_check => true does not wrap IPv6 hosts.
by Joe Rafaniello <jrafanie@redhat.com>
https://github.com/ruby/ruby/pull/765 fix GH-765
* test/uri/test_generic.rb: Add more tests
Mon Dec 1 20:01:12 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
* ext/win32ole/win32ole.c: use typed data for WIN32OLE.

Просмотреть файл

@ -184,7 +184,7 @@ module URI
if arg_check
self.scheme = scheme
self.userinfo = userinfo
self.host = host
self.hostname = host
self.port = port
self.path = path
self.query = query

Просмотреть файл

@ -758,12 +758,26 @@ class URI::TestGeneric < Test::Unit::TestCase
end
def test_build
URI::Generic.build(['http', nil, 'example.com', 80, nil, '/foo', nil, nil, nil])
u = URI::Generic.build(['http', nil, 'example.com', 80, nil, '/foo', nil, nil, nil])
assert_equal('http://example.com:80/foo', u.to_s)
u = URI::Generic.build(:scheme => "http", :host => "::1", :path => "/bar/baz")
assert_equal("http://[::1]/bar/baz", u.to_s)
assert_equal("[::1]", u.host)
assert_equal("::1", u.hostname)
u = URI::Generic.build(:scheme => "http", :host => "[::1]", :path => "/bar/baz")
assert_equal("http://[::1]/bar/baz", u.to_s)
assert_equal("[::1]", u.host)
assert_equal("::1", u.hostname)
end
def test_build2
URI::Generic.build2(path: "/foo bar/baz")
URI::Generic.build2(['http', nil, 'example.com', 80, nil, '/foo bar' , nil, nil, nil])
u = URI::Generic.build2(path: "/foo bar/baz")
assert_equal('/foo%20bar/baz', u.to_s)
u = URI::Generic.build2(['http', nil, 'example.com', 80, nil, '/foo bar' , nil, nil, nil])
assert_equal('http://example.com:80/foo%20bar', u.to_s)
end
# 192.0.2.0/24 is TEST-NET. [RFC3330]