From e52ab312069a9af0c37c1666141752f3bc805054 Mon Sep 17 00:00:00 2001 From: Ashe Connor Date: Wed, 7 Mar 2018 11:41:46 +1100 Subject: URI.unescape handles mixed Unicode/escaped input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, URI.enscape could handle Unicode input (without any actual escaped characters), or input with escaped characters (but no actual Unicode characters) - not both. URI.unescape("\xe3\x83\x90") # => "バ" URI.unescape("%E3%83%90") # => "バ" URI.unescape("\xe3\x83\x90%E3%83%90") # => # Encoding::CompatibilityError We need to let `gsub` handle this for us, and then force back to the original encoding of the input. The result String will be mangled if the percent-encoded characters don't conform to the encoding of the String itself, but that goes without saying. Signed-off-by: Ashe Connor --- activesupport/CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'activesupport/CHANGELOG.md') diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index a7af51f83e..9351a75dfa 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,5 +1,15 @@ ## Rails 6.0.0.alpha (Unreleased) ## +* Fix bug where `URI.unscape` would fail with mixed Unicode/escaped character input: + + URI.unescape("\xe3\x83\x90") # => "バ" + URI.unescape("%E3%83%90") # => "バ" + URI.unescape("\xe3\x83\x90%E3%83%90") # => Encoding::CompatibilityError + + GH#32183 + + *Ashe Connor*, *Aaron Patterson* + * Add `:private` option to ActiveSupport's `Module#delegate` in order to delegate methods as private: -- cgit v1.2.3