summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Clark <jclark@newrelic.com>2014-09-19 15:43:45 -0700
committerFlorian Frank <flori@ping.de>2015-01-02 23:48:43 +0100
commit0f6a75a554a7524a7a009f992ac50f9fad395bec (patch)
treef9f90b6402cc2b7e4505aab806a73f3fc09ec7fb
parenta97cbd03c5e1d4d486a8dfb28b005ff4eabeaca0 (diff)
downloadjson-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.rb2
-rwxr-xr-xtests/test_json.rb6
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]