mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
5460591f02
1. Escape '%' characters in URLs - only unescaped data should be passed to URL helpers 2. Add an `escape_segment` helper to `Router::Utils` that escapes '/' characters 3. Use `escape_segment` rather than `escape_fragment` in optimized URL generation 4. Use `escape_segment` rather than `escape_path` in URL generation For point 4 there are two exceptions. Firstly, when a route uses wildcard segments (e.g. *foo) then we use `escape_path` as the value may contain '/' characters. This means that wildcard routes can't be optimized. Secondly, if a `:controller` segment is used in the path then this uses `escape_path` as the controller may be namespaced. Fixes #14629, #14636 and #14070.
33 lines
899 B
Ruby
33 lines
899 B
Ruby
require 'abstract_unit'
|
|
|
|
module ActionDispatch
|
|
module Journey
|
|
class Router
|
|
class TestUtils < ActiveSupport::TestCase
|
|
def test_path_escape
|
|
assert_equal "a/b%20c+d%25", Utils.escape_path("a/b c+d%")
|
|
end
|
|
|
|
def test_segment_escape
|
|
assert_equal "a%2Fb%20c+d%25", Utils.escape_segment("a/b c+d%")
|
|
end
|
|
|
|
def test_fragment_escape
|
|
assert_equal "a/b%20c+d%25?e", Utils.escape_fragment("a/b c+d%?e")
|
|
end
|
|
|
|
def test_uri_unescape
|
|
assert_equal "a/b c+d", Utils.unescape_uri("a%2Fb%20c+d")
|
|
end
|
|
|
|
def test_normalize_path_not_greedy
|
|
assert_equal "/foo%20bar%20baz", Utils.normalize_path("/foo%20bar%20baz")
|
|
end
|
|
|
|
def test_normalize_path_uppercase
|
|
assert_equal "/foo%AAbar%AAbaz", Utils.normalize_path("/foo%aabar%aabaz")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|