Permalink
Browse files

Broaden URI.unescape fix to all affected 1.9.x by checking for broken…

… behavior instead of specific patchlevel
  • Loading branch information...
1 parent faf7986 commit 518389d1ef41f8c4116bc844bad44356c7aa4f9d @jeremy jeremy committed Feb 21, 2009
Showing with 18 additions and 11 deletions.
  1. +12 −6 activesupport/lib/active_support/core_ext/uri.rb
  2. +6 −5 activesupport/test/core_ext/uri_ext_test.rb
@@ -1,10 +1,16 @@
-if RUBY_VERSION == "1.9.1" && defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL == 0
+if RUBY_VERSION >= '1.9'
require 'uri'
- URI::Parser.class_eval do
- remove_method :unescape
- def unescape(str, escaped = @regexp[:ESCAPED])
- enc = (str.encoding == Encoding::US_ASCII) ? Encoding::UTF_8 : str.encoding
- str.gsub(escaped) { [$&[1, 2].hex].pack('C') }.force_encoding(enc)
+
+ str = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E" # Ni-ho-nn-go in UTF-8, means Japanese.
+ str.force_encoding(Encoding::UTF_8) if str.respond_to?(:force_encoding)
+
+ unless str == URI.unescape(URI.escape(str))
+ URI::Parser.class_eval do
+ remove_method :unescape
+ def unescape(str, escaped = @regexp[:ESCAPED])
+ enc = (str.encoding == Encoding::US_ASCII) ? Encoding::UTF_8 : str.encoding
+ str.gsub(escaped) { [$&[1, 2].hex].pack('C') }.force_encoding(enc)
+ end
end
end
end
@@ -1,11 +1,12 @@
require 'abstract_unit'
+require 'uri'
-class URITest < Test::Unit::TestCase
+class URIExtTest < Test::Unit::TestCase
def test_uri_decode_handle_multibyte
- str = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E" # Ni-ho-nn-go in UTF-8, means Japanese.
- str.force_encoding(Encoding::UTF_8) if(defined? Encoding::UTF_8)
+ str = "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E" # Ni-ho-nn-go in UTF-8, means Japanese.
+ str.force_encoding(Encoding::UTF_8) if str.respond_to?(:force_encoding)
- assert_equal str, ::URI.unescape( ::URI.escape(str) )
- assert_equal str, ::URI.decode( ::URI.escape(str) )
+ assert_equal str, URI.unescape(URI.escape(str))
+ assert_equal str, URI.decode(URI.escape(str))
end
end

0 comments on commit 518389d

Please sign in to comment.