[前][次][番号順一覧][スレッド一覧]

ruby-changes:50723

From: naruse <ko1@a...>
Date: Thu, 22 Mar 2018 20:20:07 +0900 (JST)
Subject: [ruby-changes:50723] naruse:r62897 (trunk): set UTF-8 if given URI string is ASCII

naruse	2018-03-22 20:20:03 +0900 (Thu, 22 Mar 2018)

  New Revision: 62897

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62897

  Log:
    set UTF-8 if given URI string is ASCII
    
    Now URI is normally UTF-8, and US-ASCII URI string is considered as
    escaped a UTF-8 string.
    https://github.com/rails/rails/issues/32294

  Modified files:
    trunk/lib/uri/rfc2396_parser.rb
    trunk/test/uri/test_parser.rb
Index: lib/uri/rfc2396_parser.rb
===================================================================
--- lib/uri/rfc2396_parser.rb	(revision 62896)
+++ lib/uri/rfc2396_parser.rb	(revision 62897)
@@ -329,7 +329,9 @@ module URI https://github.com/ruby/ruby/blob/trunk/lib/uri/rfc2396_parser.rb#L329
     # Removes escapes from +str+
     #
     def unescape(str, escaped = @regexp[:ESCAPED])
-      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(str.encoding) }
+      enc = str.encoding
+      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
+      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
     end
 
     @@to_s = Kernel.instance_method(:to_s)
Index: test/uri/test_parser.rb
===================================================================
--- test/uri/test_parser.rb	(revision 62896)
+++ test/uri/test_parser.rb	(revision 62897)
@@ -50,6 +50,7 @@ class URI::TestParser < Test::Unit::Test https://github.com/ruby/ruby/blob/trunk/test/uri/test_parser.rb#L50
     p1 = URI::Parser.new
     assert_equal("\xe3\x83\x90", p1.unescape("\xe3\x83\x90"))
     assert_equal("\xe3\x83\x90", p1.unescape('%e3%83%90'))
+    assert_equal("\u3042", p1.unescape('%e3%81%82'.force_encoding(Encoding::US_ASCII)))
     assert_equal("\xe3\x83\x90\xe3\x83\x90", p1.unescape("\xe3\x83\x90%e3%83%90"))
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]