aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2013-01-10 22:53:44 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2013-01-10 22:53:44 -0800
commit3211eb17b999523d19d7e5e4431e0f1ac25a740f (patch)
treed100fa9b22d47dcf58212f56c4f98e5226d37005
parentd564ee06a8430df809397a64e2d5f9d797be7106 (diff)
parent7003b36ecfe6f04a87e913828ab0f8dde4e03ecb (diff)
downloadrails-3211eb17b999523d19d7e5e4431e0f1ac25a740f.tar.gz
rails-3211eb17b999523d19d7e5e4431e0f1ac25a740f.tar.bz2
rails-3211eb17b999523d19d7e5e4431e0f1ac25a740f.zip
Merge pull request #8888 from dylanahsmith/3-2-parse-non-object-json-params
3-2-stable: Fix JSON params parsing regression for non-object JSON content.
-rw-r--r--actionpack/CHANGELOG.md4
-rw-r--r--actionpack/lib/action_dispatch/middleware/params_parser.rb4
-rw-r--r--actionpack/test/dispatch/request/json_params_parsing_test.rb7
3 files changed, 13 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index 9a53d6fcf9..f83bbcdced 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -1,5 +1,9 @@
## Rails 3.2.12 (unreleased) ##
+* Fixed JSON params parsing regression for non-object JSON content.
+
+ *Dylan Smith*
+
* Prevent unnecessary asset compilation when using `javascript_include_tag` on
files with non-standard extensions.
diff --git a/actionpack/lib/action_dispatch/middleware/params_parser.rb b/actionpack/lib/action_dispatch/middleware/params_parser.rb
index ac726895fa..0e03d85d9a 100644
--- a/actionpack/lib/action_dispatch/middleware/params_parser.rb
+++ b/actionpack/lib/action_dispatch/middleware/params_parser.rb
@@ -44,10 +44,10 @@ module ActionDispatch
when :yaml
YAML.load(request.raw_post)
when :json
- data = request.deep_munge ActiveSupport::JSON.decode(request.body)
+ data = ActiveSupport::JSON.decode(request.body)
request.body.rewind if request.body.respond_to?(:rewind)
data = {:_json => data} unless data.is_a?(Hash)
- data.with_indifferent_access
+ request.deep_munge(data).with_indifferent_access
else
false
end
diff --git a/actionpack/test/dispatch/request/json_params_parsing_test.rb b/actionpack/test/dispatch/request/json_params_parsing_test.rb
index fbf2ce1fbe..4886bf13b2 100644
--- a/actionpack/test/dispatch/request/json_params_parsing_test.rb
+++ b/actionpack/test/dispatch/request/json_params_parsing_test.rb
@@ -120,6 +120,13 @@ class RootLessJSONParamsParsingTest < ActionDispatch::IntegrationTest
)
end
+ test "parses json with non-object JSON content" do
+ assert_parses(
+ {"user" => {"_json" => "string content" }, "_json" => "string content" },
+ "\"string content\"", { 'CONTENT_TYPE' => 'application/json' }
+ )
+ end
+
private
def assert_parses(expected, actual, headers = {})
with_test_routing(UsersController) do