提交 276bfa7f 编写于 作者: E Eileen M. Uchitelle 提交者: GitHub

Merge pull request #29062 from eileencodes/force-encoding-to-original-string-encoding

Maintain original encoding from path
...@@ -13,11 +13,13 @@ class Utils # :nodoc: ...@@ -13,11 +13,13 @@ class Utils # :nodoc:
# normalize_path("") # => "/" # normalize_path("") # => "/"
# normalize_path("/%ab") # => "/%AB" # normalize_path("/%ab") # => "/%AB"
def self.normalize_path(path) def self.normalize_path(path)
encoding = path.encoding
path = "/#{path}" path = "/#{path}"
path.squeeze!("/".freeze) path.squeeze!("/".freeze)
path.sub!(%r{/+\Z}, "".freeze) path.sub!(%r{/+\Z}, "".freeze)
path.gsub!(/(%[a-f0-9]{2})/) { $1.upcase } path.gsub!(/(%[a-f0-9]{2})/) { $1.upcase }
path = "/" if path == "".freeze path = "/" if path == "".freeze
path.force_encoding(encoding)
path path
end end
......
...@@ -31,6 +31,11 @@ def test_normalize_path_not_greedy ...@@ -31,6 +31,11 @@ def test_normalize_path_not_greedy
def test_normalize_path_uppercase def test_normalize_path_uppercase
assert_equal "/foo%AAbar%AAbaz", Utils.normalize_path("/foo%aabar%aabaz") assert_equal "/foo%AAbar%AAbaz", Utils.normalize_path("/foo%aabar%aabaz")
end end
def test_normalize_path_maintains_string_encoding
path = "/foo%AAbar%AAbaz".b
assert_equal Encoding::ASCII_8BIT, Utils.normalize_path(path).encoding
end
end end
end end
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册