aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-09-12 10:13:14 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-09-12 10:13:14 -0700
commit0fbb797e5f667443e49f3c3a2b370eb00dc48951 (patch)
treea52d6b24e0a2cd16e78ef63a45e138a4ce7ee878
parent4bdf929579cf80713518cc12b4610dd3ae7a9adf (diff)
parent52fb1a9565a2c1d163efa95f3d1a42247a4cc074 (diff)
downloadrails-0fbb797e5f667443e49f3c3a2b370eb00dc48951.tar.gz
rails-0fbb797e5f667443e49f3c3a2b370eb00dc48951.tar.bz2
rails-0fbb797e5f667443e49f3c3a2b370eb00dc48951.zip
Merge pull request #12207 from chancancode/fix_json_load
Enabled quirks mode on JSON.parse, fixes broken test in af9caae
-rw-r--r--activesupport/lib/active_support/json/decoding.rb2
-rw-r--r--activesupport/test/json/decoding_test.rb14
2 files changed, 14 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/json/decoding.rb b/activesupport/lib/active_support/json/decoding.rb
index 2533ff43e1..21de09c1cc 100644
--- a/activesupport/lib/active_support/json/decoding.rb
+++ b/activesupport/lib/active_support/json/decoding.rb
@@ -14,7 +14,7 @@ module ActiveSupport
# ActiveSupport::JSON.decode("{\"team\":\"rails\",\"players\":\"36\"}")
# => {"team" => "rails", "players" => "36"}
def decode(json, options = {})
- data = ::JSON.parse(json, options.merge(create_additions: false))
+ data = ::JSON.parse(json, options.merge(create_additions: false, quirks_mode: true))
if ActiveSupport.parse_json_times
convert_dates_from(data)
else
diff --git a/activesupport/test/json/decoding_test.rb b/activesupport/test/json/decoding_test.rb
index 3ec9b06d6a..e9780b36e4 100644
--- a/activesupport/test/json/decoding_test.rb
+++ b/activesupport/test/json/decoding_test.rb
@@ -59,7 +59,16 @@ class TestJSONDecoding < ActiveSupport::TestCase
%q({"a":"\n"}) => {"a"=>"\n"},
%q({"a":"\u000a"}) => {"a"=>"\n"},
%q({"a":"Line1\u000aLine2"}) => {"a"=>"Line1\nLine2"},
- %q({"json_class":"TestJSONDecoding::Foo"}) => {"json_class"=>"TestJSONDecoding::Foo"}
+ # prevent json unmarshalling
+ %q({"json_class":"TestJSONDecoding::Foo"}) => {"json_class"=>"TestJSONDecoding::Foo"},
+ # json "fragments" - these are invalid JSON, but ActionPack relies on this
+ %q("a string") => "a string",
+ %q(1.1) => 1.1,
+ %q(1) => 1,
+ %q(-1) => -1,
+ %q(true) => true,
+ %q(false) => false,
+ %q(null) => nil
}
TESTS.each_with_index do |(json, expected), index|
@@ -83,7 +92,10 @@ class TestJSONDecoding < ActiveSupport::TestCase
end
def test_failed_json_decoding
+ assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%(undefined)) }
+ assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({a: 1})) }
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({: 1})) }
+ assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%()) }
end
def test_cannot_force_json_unmarshalling