mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fixed query parser to deal gracefully with equal signs inside keys and values #1345 [gorou]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1441 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
a7a1c4e2cd
commit
a895be0259
3 changed files with 22 additions and 2 deletions
|
@ -1,6 +1,9 @@
|
|||
*SVN*
|
||||
|
||||
* Added cuba to country list #1351 [todd]
|
||||
* Fixed query parser to deal gracefully with equal signs inside keys and values #1345 [gorou].
|
||||
Example: /?sig=abcdef=:foobar=&x=y will pass now.
|
||||
|
||||
* Added Cuba to country list #1351 [todd]
|
||||
|
||||
* Fixed radio_button to work with numeric values #1352 [demetrius]
|
||||
|
||||
|
|
|
@ -11,7 +11,8 @@ class CGIMethods #:nodoc:
|
|||
parsed_params = {}
|
||||
|
||||
query_string.split(/[&;]/).each { |p|
|
||||
k, v = p.split('=')
|
||||
k, v = p.split('=',2)
|
||||
v = nil if (!v.nil? && v.empty?)
|
||||
|
||||
k = CGI.unescape(k) unless k.nil?
|
||||
v = CGI.unescape(v) unless v.nil?
|
||||
|
|
|
@ -21,6 +21,8 @@ class CGITest < Test::Unit::TestCase
|
|||
@query_string_with_amps = "action=create_customer&name=Don%27t+%26+Does"
|
||||
@query_string_with_multiple_of_same_name =
|
||||
"action=update_order&full_name=Lau%20Taarnskov&products=4&products=2&products=3"
|
||||
@query_string_with_many_equal = "action=create_customer&full_name=abc=def=ghi"
|
||||
@query_string_without_equal = "action"
|
||||
end
|
||||
|
||||
def test_query_string
|
||||
|
@ -51,6 +53,20 @@ class CGITest < Test::Unit::TestCase
|
|||
)
|
||||
end
|
||||
|
||||
def test_query_string_with_many_equal
|
||||
assert_equal(
|
||||
{ "action" => "create_customer", "full_name" => "abc=def=ghi"},
|
||||
CGIMethods.parse_query_parameters(@query_string_with_many_equal)
|
||||
)
|
||||
end
|
||||
|
||||
def test_query_string_without_equal
|
||||
assert_equal(
|
||||
{ "action" => nil },
|
||||
CGIMethods.parse_query_parameters(@query_string_without_equal)
|
||||
)
|
||||
end
|
||||
|
||||
def test_parse_params
|
||||
input = {
|
||||
"customers[boston][first][name]" => [ "David" ],
|
||||
|
|
Loading…
Reference in a new issue