Project

General

Profile

Actions

Bug #9583

closed

Open3 cannot talk correctly with Ruby when there is a large DATA segment passed through stdin. Broken pipe (Errno::EPIPE)

Added by josh.cheek (Josh Cheek) almost 8 years ago. Updated almost 8 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0dev (2014-03-01 trunk 45219) [x86_64-darwin12.0]
[ruby-core:61156]

Description

$ # Tested against
$ ruby -v
ruby 2.2.0dev (2014-03-01 trunk 45219) [x86_64-darwin12.0]

Example
$ ruby -e 'puts "END"; puts "."*24_568' > f.rb; ruby -r open3 -e 'Open3.popen3("ruby") { |i, o, e| i.write File.read "f.rb"; i.close; puts o.read; puts e.read }'
-e:1:in write': Broken pipe (Errno::EPIPE)
from -e:1:in
block in '
from /Users/josh/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/open3.rb:217:in popen_run'
from /Users/josh/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/open3.rb:99:in
popen3'
from -e:1:in `'

If we reduce the size of the data segment by 1 character, it works:
$ ruby -e 'puts "END"; puts "."*24_567' > f.rb; ruby -r open3 -e 'Open3.popen3("ruby") { |i, o, e| i.write File.read "f.rb"; i.close; puts o.read; puts e.read }'

If we take it out of the data segment, it is fine
$ ruby -e 'puts "#" + "."*100_000' > f.rb; ruby -r open3 -e 'Open3.popen3("ruby") { |i, o, e| i.write File.read "f.rb"; i.close; puts o.read; puts e.read }'

Actions

Also available in: Atom PDF