aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLawrence Pit <lawrence.pit@gmail.com>2010-05-06 21:40:48 +1000
committerJeremy Kemper <jeremy@bitsweat.net>2010-05-06 20:34:47 -0700
commit1e1d30715ee75312b41045d2af1c68492ea66a05 (patch)
tree94a3f064d13aba54d02b6cada630ca84476e77e3
parent902861a43ae90032063f4a14a3e8b4b9b9c3ca2f (diff)
downloadrails-1e1d30715ee75312b41045d2af1c68492ea66a05.tar.gz
rails-1e1d30715ee75312b41045d2af1c68492ea66a05.tar.bz2
rails-1e1d30715ee75312b41045d2af1c68492ea66a05.zip
Fix parsing xml input by ActionDispatch::ParamsParser
[#4437 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
-rw-r--r--actionpack/lib/action_dispatch/middleware/params_parser.rb2
-rw-r--r--actionpack/test/dispatch/request/xml_params_parsing_test.rb13
2 files changed, 14 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/params_parser.rb b/actionpack/lib/action_dispatch/middleware/params_parser.rb
index a25089176c..d4208ca96e 100644
--- a/actionpack/lib/action_dispatch/middleware/params_parser.rb
+++ b/actionpack/lib/action_dispatch/middleware/params_parser.rb
@@ -38,7 +38,7 @@ module ActionDispatch
when Proc
strategy.call(request.raw_post)
when :xml_simple, :xml_node
- data = Hash.from_xml(request.body) || {}
+ data = Hash.from_xml(request.body.read) || {}
request.body.rewind if request.body.respond_to?(:rewind)
data.with_indifferent_access
when :yaml
diff --git a/actionpack/test/dispatch/request/xml_params_parsing_test.rb b/actionpack/test/dispatch/request/xml_params_parsing_test.rb
index 488799ac2a..f2ce2c5b93 100644
--- a/actionpack/test/dispatch/request/xml_params_parsing_test.rb
+++ b/actionpack/test/dispatch/request/xml_params_parsing_test.rb
@@ -16,6 +16,19 @@ class XmlParamsParsingTest < ActionController::IntegrationTest
TestController.last_request_parameters = nil
end
+ test "parses a strict rack.input" do
+ class Linted
+ def call(env)
+ bar = env['action_dispatch.request.request_parameters']['foo']
+ result = "<ok>#{bar}</ok>"
+ [200, {"Content-Type" => "application/xml", "Content-Length" => result.length.to_s}, result]
+ end
+ end
+ req = Rack::MockRequest.new(ActionDispatch::ParamsParser.new(Linted.new))
+ resp = req.post('/', "CONTENT_TYPE" => "application/xml", :input => "<foo>bar</foo>", :lint => true)
+ assert_equal "<ok>bar</ok>", resp.body
+ end
+
test "parses hash params" do
with_test_routing do
xml = "<person><name>David</name></person>"