diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 9eab6835870712445100662c1ee0668fa86b8406..0d679f93e2416d47fa2623d29763aa5c97daa4af 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* request.host works with IPv6 addresses. #9458 [yuya] + * Fix bug where action caching sets the content type to the ActionCachePath object. Closes #9282 [mindforge] * Find layouts even if they're not in the first view_paths directory. Closes #9258 [caio] diff --git a/actionpack/lib/action_controller/cgi_process.rb b/actionpack/lib/action_controller/cgi_process.rb index fa7afd419720ed3fc8cdb962bdfb815ca278cae5..6e8098e746eadc386de2d3a02a1133b977f5b41d 100644 --- a/actionpack/lib/action_controller/cgi_process.rb +++ b/actionpack/lib/action_controller/cgi_process.rb @@ -92,7 +92,7 @@ def host_with_port end def host - host_with_port[/^[^:]+/] + host_with_port.sub(/:\d+$/, '') end def port diff --git a/actionpack/test/controller/cgi_test.rb b/actionpack/test/controller/cgi_test.rb index a5b24ebcd4ed39abb659c8133410c732620f26d7..fe94d7c7a6a05f90045ee66a22ad42b9439d0db7 100755 --- a/actionpack/test/controller/cgi_test.rb +++ b/actionpack/test/controller/cgi_test.rb @@ -47,6 +47,18 @@ def test_host_with_port_falls_back_to_server_addr_if_necessary assert_equal "207.7.108.53:8007", @request.host_with_port end + def test_host_if_ipv6_reference + @request_hash.delete "HTTP_X_FORWARDED_HOST" + @request_hash['HTTP_HOST'] = "[2001:1234:5678:9abc:def0::dead:beef]" + assert_equal "[2001:1234:5678:9abc:def0::dead:beef]", @request.host + end + + def test_host_if_ipv6_reference_with_port + @request_hash.delete "HTTP_X_FORWARDED_HOST" + @request_hash['HTTP_HOST'] = "[2001:1234:5678:9abc:def0::dead:beef]:8008" + assert_equal "[2001:1234:5678:9abc:def0::dead:beef]", @request.host + end + def test_cookie_syntax_resilience cookies = CGI::Cookie::parse(@request_hash["HTTP_COOKIE"]); assert_equal ["c84ace84796670c052c6ceb2451fb0f2"], cookies["_session_id"]