From dc136c12ee4d704de7621408ab0a5d9108284b45 Mon Sep 17 00:00:00 2001 From: gotoyuzo Date: Mon, 31 Jul 2006 04:39:45 +0000 Subject: * lib/webrick/httprequest.rb (WEBrick::HTTPReuqest#parse_uri): improve for the value of IPv6 address in the Host: header field. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10646 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 ++++ lib/webrick/httprequest.rb | 3 ++- test/webrick/test_httprequest.rb | 58 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ce0922120d..a110268414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Jul 31 13:38:22 2006 GOTOU Yuuzou + + * 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 * 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" -- cgit v1.2.3