diff options
author | Paul Kuruvilla <rohitpaulk@gmail.com> | 2017-10-23 15:17:31 +0530 |
---|---|---|
committer | Paul Kuruvilla <rohitpaulk@gmail.com> | 2017-10-23 15:49:00 +0530 |
commit | 813f8e333dabb2050d6b668b7bdd68b4979e8af4 (patch) | |
tree | 1bdf5e8b3e657f2cd8dd73b247724b51bb33d5fc /activesupport | |
parent | f4d1aa5310284ebceb51970140fa08f6c8ea19b6 (diff) | |
download | rails-813f8e333dabb2050d6b668b7bdd68b4979e8af4.tar.gz rails-813f8e333dabb2050d6b668b7bdd68b4979e8af4.tar.bz2 rails-813f8e333dabb2050d6b668b7bdd68b4979e8af4.zip |
Fix #to_json for unreadable IO objects, fixes #26132
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/CHANGELOG.md | 8 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/json.rb | 6 | ||||
-rw-r--r-- | activesupport/test/json/encoding_test.rb | 4 |
3 files changed, 18 insertions, 0 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 7696fdcd7a..4e713da8a8 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,11 @@ +* `IO#to_json` now returns the `to_s` representation, rather than + attempting to convert to an array. This fixes a bug where `IO#to_json` + would raise an `IOError` when called on an unreadable object. + + Fixes #26132. + + *Paul Kuruvilla* + * `Hash#slice` now falls back to Ruby 2.5+'s built-in definition if defined. *Akira Matsuda* diff --git a/activesupport/lib/active_support/core_ext/object/json.rb b/activesupport/lib/active_support/core_ext/object/json.rb index 0a3b875f24..f7c623fe13 100644 --- a/activesupport/lib/active_support/core_ext/object/json.rb +++ b/activesupport/lib/active_support/core_ext/object/json.rb @@ -135,6 +135,12 @@ module Enumerable end end +class IO + def as_json(options = nil) #:nodoc: + to_s + end +end + class Range def as_json(options = nil) #:nodoc: to_s diff --git a/activesupport/test/json/encoding_test.rb b/activesupport/test/json/encoding_test.rb index eafa2e1712..96ad8dfbdb 100644 --- a/activesupport/test/json/encoding_test.rb +++ b/activesupport/test/json/encoding_test.rb @@ -454,6 +454,10 @@ EXPECTED assert_equal '{"number":null}', NaNNumber.new.to_json end + def test_to_json_works_on_io_objects + assert_equal STDOUT.to_s.to_json, STDOUT.to_json + end + private def object_keys(json_object) |