diff --git a/ChangeLog b/ChangeLog index cb83017b0e..31e74d39e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Dec 23 22:04:38 2014 NARUSE, Yui + + * lib/uri/generic.rb (URI::Generic#query=): don't escape [\]^ + on both rfc2396 and rfc3986. [Bug #10619] + Tue Dec 23 16:03:35 2014 Nobuyoshi Nakada * ext/win32/lib/win32/registry.rb (Win32::Registry::Error#initialize): diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index c0b94a84fe..bacd90382d 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -851,7 +851,7 @@ module URI v.encode!(Encoding::UTF_8) rescue nil v.delete!("\t\r\n") v.force_encoding(Encoding::ASCII_8BIT) - v.gsub!(/(?!%\h\h|[!$-&(-;=?-Z_a-~])./n.freeze){'%%%02X'.freeze % $&.ord} + v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X'.freeze % $&.ord} v.force_encoding(Encoding::US_ASCII) @query = v end diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb index 9de40a0276..37605d5de5 100644 --- a/test/uri/test_generic.rb +++ b/test/uri/test_generic.rb @@ -714,9 +714,9 @@ class URI::TestGeneric < Test::Unit::TestCase assert_equal('b123', uri.fragment = 'b123') assert_equal('http://foo:bar@zab:8080/?a=1#b123', uri.to_s) assert_equal('a[]=1', uri.query = 'a[]=1') - assert_equal('http://foo:bar@zab:8080/?a%5B%5D=1#b123', uri.to_s) + assert_equal('http://foo:bar@zab:8080/?a[]=1#b123', uri.to_s) uri = URI.parse('http://foo:bar@zab:8080/?a[]=1#b123') - assert_equal('http://foo:bar@zab:8080/?a%5B%5D=1#b123', uri.to_s) + assert_equal('http://foo:bar@zab:8080/?a[]=1#b123', uri.to_s) uri = URI.parse('http://example.com') assert_raise(URI::InvalidURIError) { uri.password = 'bar' }