aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/controller/redirect_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test/controller/redirect_test.rb')
-rw-r--r--actionpack/test/controller/redirect_test.rb44
1 files changed, 37 insertions, 7 deletions
diff --git a/actionpack/test/controller/redirect_test.rb b/actionpack/test/controller/redirect_test.rb
index 998498e1b2..945d2275c0 100644
--- a/actionpack/test/controller/redirect_test.rb
+++ b/actionpack/test/controller/redirect_test.rb
@@ -49,11 +49,11 @@ class RedirectController < ActionController::Base
end
def url_redirect_with_status
- redirect_to("http://www.example.com", status: :moved_permanently)
+ redirect_to("http://www.example.com", status: :moved_permanently, allow_other_host: true)
end
def url_redirect_with_status_hash
- redirect_to("http://www.example.com", status: 301)
+ redirect_to("http://www.example.com", status: 301, allow_other_host: true)
end
def relative_url_redirect_with_status
@@ -81,19 +81,27 @@ class RedirectController < ActionController::Base
end
def redirect_to_url
+ redirect_to "http://www.rubyonrails.org/", allow_other_host: true
+ end
+
+ def redirect_to_unsafe_url
redirect_to "http://www.rubyonrails.org/"
end
+ def redirect_to_relative_unsafe_url
+ redirect_to ".br"
+ end
+
def redirect_to_url_with_unescaped_query_string
- redirect_to "http://example.com/query?status=new"
+ redirect_to "http://example.com/query?status=new", allow_other_host: true
end
def redirect_to_url_with_complex_scheme
- redirect_to "x-test+scheme.complex:redirect"
+ redirect_to "x-test+scheme.complex:redirect", allow_other_host: true
end
def redirect_to_url_with_network_path_reference
- redirect_to "//www.rubyonrails.org/"
+ redirect_to "//www.rubyonrails.org/", allow_other_host: true
end
def redirect_to_existing_record
@@ -113,12 +121,12 @@ class RedirectController < ActionController::Base
end
def redirect_to_with_block
- redirect_to proc { "http://www.rubyonrails.org/" }
+ redirect_to proc { "http://www.rubyonrails.org/" }, allow_other_host: true
end
def redirect_to_with_block_and_assigns
@url = "http://www.rubyonrails.org/"
- redirect_to proc { @url }
+ redirect_to proc { @url }, allow_other_host: true
end
def redirect_to_with_block_and_options
@@ -245,6 +253,28 @@ class RedirectTest < ActionController::TestCase
assert_redirected_to "http://www.rubyonrails.org/"
end
+ def test_redirect_to_unsafe_url
+ error = assert_raises(ArgumentError) do
+ get :redirect_to_unsafe_url
+ end
+ assert_equal <<~MSG.squish, error.message
+ Unsafe redirect \"http://www.rubyonrails.org/\",
+ use :fallback_location to specify a fallback or
+ :allow_other_host to redirect anyway.
+ MSG
+ end
+
+ def test_redirect_to_relative_unsafe_url
+ error = assert_raises(ArgumentError) do
+ get :redirect_to_relative_unsafe_url
+ end
+ assert_equal <<~MSG.squish, error.message
+ Unsafe redirect \"http://test.host.br\",
+ use :fallback_location to specify a fallback or
+ :allow_other_host to redirect anyway.
+ MSG
+ end
+
def test_redirect_to_url_with_unescaped_query_string
get :redirect_to_url_with_unescaped_query_string
assert_response :redirect