From 4b22c8136d132e8586511e32bce036ef7f5d0093 Mon Sep 17 00:00:00 2001 From: Lawrence Pit Date: Thu, 6 May 2010 21:40:48 +1000 Subject: [PATCH] Fix parsing xml input by ActionDispatch::ParamsParser --- .../action_dispatch/middleware/params_parser.rb | 2 +- .../dispatch/request/xml_params_parsing_test.rb | 13 +++++++++++++ 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 a250891..d4208ca 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 488799a..f2ce2c5 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 = "#{bar}" + [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 => "bar", :lint => true) + assert_equal "bar", resp.body + end + test "parses hash params" do with_test_routing do xml = "David" -- 1.7.0