Bug #15636
closed::Socket#to_a hangs Ruby interpreter
Description
ruby -v
: ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]
Reproducible script¶
require 'socket'
s = Socket.new(:INET, :STREAM)
s.connect Socket.pack_sockaddr_in(80, 'example.com')
s.to_a
Result¶
Ruby hangs infinitely.
Expected¶
Socket instance converted to an array representation (whatever that might be). I expect this as to_a
comes from the ::Enumerable
mixin included in ::IO
- one of ::Socket
's parent classes.
Background¶
I came across this while working on Redis client serialization in our Rollbar SDK here: https://github.com/rollbar/rollbar-gem/blob/master/spec/rollbar/item_spec.rb#L682-L686. This becomes a problem when you try to use ActiveSupport JSON to serialize a Redis client instance:
activesupport
: v4.2.8
redis
: v4.1.0
-
Object#as_json
inactive_support/core_ext/object/json.rb#50
<- callsas_json
on theinstance_values
-
Hash@as_json
inactive_support/core_ext/object/json.rb#159
<- callsas_json
-
Enumerable#as_json
inlib/active_support/core_ext/object/json.rb#128
<- calls to_a on aRedis::Connection::TCPSocket
object