mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/uri/common.rb (decode_www_form): don't ignore leading '?'.
[ruby-dev:40938] * lib/uri/common.rb (decode_www_form): check whether argument is valid application/x-www-form-urlencoded data. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1f2def7dd8
commit
8a3c3b9c95
3 changed files with 21 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
Fri Apr 9 20:54:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* lib/uri/common.rb (decode_www_form): don't ignore leading '?'.
|
||||
[ruby-dev:40938]
|
||||
|
||||
* lib/uri/common.rb (decode_www_form): check whether argument is
|
||||
valid application/x-www-form-urlencoded data.
|
||||
|
||||
Fri Apr 9 20:29:13 2010 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* dir.c (push_glob): clear up the previous commit (RB_GC_GUARD can
|
||||
|
|
|
@ -805,6 +805,9 @@ module URI
|
|||
str
|
||||
end
|
||||
|
||||
# :nodoc:
|
||||
WFKV_ = '(?:%\h\h|[^%#=;&])'
|
||||
|
||||
# Decode URL-encoded form data from given +str+.
|
||||
#
|
||||
# This decodes application/x-www-form-urlencoded data
|
||||
|
@ -826,11 +829,11 @@ module URI
|
|||
#
|
||||
# See URI.decode_www_form_component, URI.encode_www_form
|
||||
def self.decode_www_form(str, enc=Encoding::UTF_8)
|
||||
ary = []
|
||||
unless /\A\??(?<query>[^=;&]*=[^;&]*(?:[;&][^=;&]*=[^;&]*)*)\z/ =~ str
|
||||
unless /\A#{WFKV_}*=#{WFKV_}*(?:[;&]#{WFKV_}*=#{WFKV_}*)*\z/o =~ str
|
||||
raise ArgumentError, "invalid data of application/x-www-form-urlencoded (#{str})"
|
||||
end
|
||||
query.scan(/([^=;&]+)=([^;&]*)/) do
|
||||
ary = []
|
||||
$&.scan(/([^=;&]+)=([^;&]*)/) do
|
||||
ary << [decode_www_form_component($1, enc), decode_www_form_component($2, enc)]
|
||||
end
|
||||
ary
|
||||
|
|
|
@ -86,7 +86,13 @@ class TestCommon < Test::Unit::TestCase
|
|||
def test_decode_www_form
|
||||
assert_equal([%w[a 1], %w[a 2]], URI.decode_www_form("a=1&a=2"))
|
||||
assert_equal([%w[a 1], ["\u3042", "\u6F22"]],
|
||||
URI.decode_www_form("a=1&%E3%81%82=%E6%BC%A2"))
|
||||
URI.decode_www_form("a=1;%E3%81%82=%E6%BC%A2"))
|
||||
assert_equal([%w[?a 1], %w[a 2]], URI.decode_www_form("?a=1&a=2"))
|
||||
assert_raise(ArgumentError){URI.decode_www_form("%=1")}
|
||||
assert_raise(ArgumentError){URI.decode_www_form("a=%")}
|
||||
assert_raise(ArgumentError){URI.decode_www_form("a=1&%=2")}
|
||||
assert_raise(ArgumentError){URI.decode_www_form("a=1&b=%")}
|
||||
assert_raise(ArgumentError){URI.decode_www_form("a&b")}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue