[ruby-core:91664] [Ruby trunk Bug#15636] ::Socket#to_a hangs Ruby interpreter

From: artur.moczulski@...
Date: 2019-03-04 22:02:59 UTC
List: ruby-core #91664
Issue #15636 has been reported by arturmoczulski (Artur Moczulski).

----------------------------------------
Bug #15636: ::Socket#to_a hangs Ruby interpreter
https://bugs.ruby-lang.org/issues/15636

* Author: arturmoczulski (Artur Moczulski)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.6.1
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
`ruby -v`: `ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]`

## Reproducible script
``` ruby
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`

1. `Object#as_json` in `active_support/core_ext/object/json.rb#50` <- calls `as_json` on the `instance_values`

2. `Hash@as_json` in `active_support/core_ext/object/json.rb#159` <- calls `as_json`

3. `Enumerable#as_json` in `lib/active_support/core_ext/object/json.rb#128` <- calls to_a on a `Redis::Connection::TCPSocket` object



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next