summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/uri/generic.rb2
-rw-r--r--test/uri/test_generic.rb4
3 files changed, 8 insertions, 3 deletions
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 <naruse@ruby-lang.org>
+
+ * 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 <nobu@ruby-lang.org>
* 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' }