aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/json
diff options
context:
space:
mode:
authorPrathamesh Sonpatki <csonpatki@gmail.com>2016-10-30 14:12:43 +0530
committerPrathamesh Sonpatki <csonpatki@gmail.com>2016-10-30 20:08:55 +0530
commit8776f15b448ed88b1108e70f2de22f0b599818aa (patch)
treea7230885e28610624da1efffed79cbe94bc55daf /activesupport/test/json
parentfe1f4b2ad56f010a4e9b93d547d63a15953d9dc2 (diff)
downloadrails-8776f15b448ed88b1108e70f2de22f0b599818aa.tar.gz
rails-8776f15b448ed88b1108e70f2de22f0b599818aa.tar.bz2
rails-8776f15b448ed88b1108e70f2de22f0b599818aa.zip
Fix an issue with JSON encoding of "Infinity" and "NaN" values
- When `as_json` returns `Infinity` or `NaN` as the value of any of the key, we don't used to call `as_json` on it as it was treated as primitive. - This used to pass `Infinity` or `NaN` to `JSON.generate` and Ruby used to throw an error for `Infinity/NaN not allowed in JSON.` - This patch changes the code to call `as_json` on these primitives so that they are converted to proper values before being passed to `JSON.generate`. - Fixes #26877.
Diffstat (limited to 'activesupport/test/json')
-rw-r--r--activesupport/test/json/encoding_test.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/activesupport/test/json/encoding_test.rb b/activesupport/test/json/encoding_test.rb
index fc3af02cbc..e745f5e190 100644
--- a/activesupport/test/json/encoding_test.rb
+++ b/activesupport/test/json/encoding_test.rb
@@ -432,6 +432,28 @@ EXPECTED
assert_equal '"foo"', ActiveSupport::JSON.encode(exception)
end
+ class InfiniteNumber
+ def as_json(options = nil)
+ { "number" => 1.0 / 0 }
+ end
+ end
+
+ def test_to_json_works_when_as_json_returns_infinite_number
+ expected = { number: nil }.to_json
+ assert_equal expected, InfiniteNumber.new.to_json
+ end
+
+ class NaNNumber
+ def as_json(options = nil)
+ { "number" => 0.0 / 0 }
+ end
+ end
+
+ def test_to_json_works_when_as_json_returns_NaN_number
+ expected = { number: nil }.to_json
+ assert_equal expected, NaNNumber.new.to_json
+ end
+
protected
def object_keys(json_object)