diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib/webrick/httprequest.rb | 3 | ||||
-rw-r--r-- | test/webrick/test_httprequest.rb | 58 |
3 files changed, 65 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Mon Jul 31 13:38:22 2006 GOTOU Yuuzou <gotoyuzo@notwork.org> + + * lib/webrick/httprequest.rb (WEBrick::HTTPReuqest#parse_uri): improve + for the value of IPv6 address in the Host: header field. + Sun Jul 30 23:26:22 2006 Nobuyoshi Nakada <nobu@ruby-lang.org> * eval.c (rb_call0): trace call/return of method defined from block. diff --git a/lib/webrick/httprequest.rb b/lib/webrick/httprequest.rb index 297866f47a..1d32293a27 100644 --- a/lib/webrick/httprequest.rb +++ b/lib/webrick/httprequest.rb @@ -256,7 +256,8 @@ module WEBrick uri = URI::parse(str) return uri if uri.absolute? if self["host"] - host, port = self['host'].split(":", 2) + pattern = /\A(#{URI::REGEXP::PATTERN::HOST})(?::(\d+))?\z/n + host, port = *self['host'].scan(pattern)[0] elsif @addr.size > 0 host, port = @addr[2], @addr[1] else diff --git a/test/webrick/test_httprequest.rb b/test/webrick/test_httprequest.rb index 777a199441..f0cd1a092a 100644 --- a/test/webrick/test_httprequest.rb +++ b/test/webrick/test_httprequest.rb @@ -111,6 +111,64 @@ class TestWEBrickHTTPRequest < Test::Unit::TestCase assert_equal("hogehoge\n", req.body) end + def test_parse_headers3 + msg = <<-_end_of_message_ + GET /path HTTP/1.1 + Host: test.ruby-lang.org + + _end_of_message_ + req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) + req.parse(StringIO.new(msg.gsub(/^ {6}/, ""))) + assert_equal(URI.parse("http://test.ruby-lang.org/path"), req.request_uri) + assert_equal("test.ruby-lang.org", req.host) + assert_equal(80, req.port) + + msg = <<-_end_of_message_ + GET /path HTTP/1.1 + Host: 192.168.1.1 + + _end_of_message_ + req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) + req.parse(StringIO.new(msg.gsub(/^ {6}/, ""))) + assert_equal(URI.parse("http://192.168.1.1/path"), req.request_uri) + assert_equal("192.168.1.1", req.host) + assert_equal(80, req.port) + + msg = <<-_end_of_message_ + GET /path HTTP/1.1 + Host: [fe80::208:dff:feef:98c7] + + _end_of_message_ + req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) + req.parse(StringIO.new(msg.gsub(/^ {6}/, ""))) + assert_equal(URI.parse("http://[fe80::208:dff:feef:98c7]/path"), + req.request_uri) + assert_equal("[fe80::208:dff:feef:98c7]", req.host) + assert_equal(80, req.port) + + msg = <<-_end_of_message_ + GET /path HTTP/1.1 + Host: 192.168.1.1:8080 + + _end_of_message_ + req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) + req.parse(StringIO.new(msg.gsub(/^ {6}/, ""))) + assert_equal(URI.parse("http://192.168.1.1:8080/path"), req.request_uri) + assert_equal("192.168.1.1", req.host) + assert_equal(8080, req.port) + + msg = <<-_end_of_message_ + GET /path HTTP/1.1 + Host: [fe80::208:dff:feef:98c7]:8080 + + _end_of_message_ + req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) + req.parse(StringIO.new(msg.gsub(/^ {6}/, ""))) + assert_equal(URI.parse("http://[fe80::208:dff:feef:98c7]:8080/path"), + req.request_uri) + assert_equal("[fe80::208:dff:feef:98c7]", req.host) + assert_equal(8080, req.port) + end def test_parse_get_params param = "foo=1;foo=2;foo=3;bar=x" |