diff options
author | Jason R. Clark <jclark@newrelic.com> | 2014-09-19 15:43:45 -0700 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2015-01-02 23:48:43 +0100 |
commit | 0f6a75a554a7524a7a009f992ac50f9fad395bec (patch) | |
tree | f9f90b6402cc2b7e4505aab806a73f3fc09ec7fb | |
parent | a97cbd03c5e1d4d486a8dfb28b005ff4eabeaca0 (diff) | |
download | json-0f6a75a554a7524a7a009f992ac50f9fad395bec.tar.gz |
Don't mutate JSON.dump_default_options from dump
The use of Hash#update from the JSON.dump method was mutating the
dump_default_options hash on any call to dump with a limit provided. An
individual method call with an overriding value shouldn't update the
defaults in this way.
-rw-r--r-- | lib/json/common.rb | 2 | ||||
-rwxr-xr-x | tests/test_json.rb | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/json/common.rb b/lib/json/common.rb index 426d933..32d9892 100644 --- a/lib/json/common.rb +++ b/lib/json/common.rb @@ -390,7 +390,7 @@ module JSON end end opts = JSON.dump_default_options - limit and opts.update(:max_nesting => limit) + opts = opts.merge(:max_nesting => limit) if limit result = generate(obj, opts) if anIO anIO.write result diff --git a/tests/test_json.rb b/tests/test_json.rb index 6af6b32..f4e6696 100755 --- a/tests/test_json.rb +++ b/tests/test_json.rb @@ -515,6 +515,12 @@ EOT assert_equal too_deep, output.string end + def test_dump_should_modify_defaults + max_nesting = JSON.dump_default_options[:max_nesting] + JSON.dump([], StringIO.new, 10) + assert_equal max_nesting, JSON.dump_default_options[:max_nesting] + end + def test_big_integers json1 = JSON([orig = (1 << 31) - 1]) assert_equal orig, JSON[json1][0] |