Actions
Bug #21867
openenabling Ruby::Box changes puts/warn to no longer use $stdout/$stderr
Bug #21867:
enabling Ruby::Box changes puts/warn to no longer use $stdout/$stderr
Description
On 4.0.1 or latest build as of 2026-02-06, given:
warn "run with RUBY_BOX=1 to repro the error" unless ENV["RUBY_BOX"]
require "stringio"
def capture_io
captured_stdout, captured_stderr = StringIO.new, StringIO.new
orig_stdout, orig_stderr = $stdout, $stderr
$stdout, $stderr = captured_stdout, captured_stderr
yield
return captured_stdout.string, captured_stderr.string
ensure
$stdout = orig_stdout
$stderr = orig_stderr
end
out, err = capture_io do
puts "standard out!" # these go to STDOUT/STDERR, not $stdout/$stderr
warn "standard err?"
$stdout.print "standard out!" # these go to the stringio as expected
$stderr.print "standard err?"
end
exp_out = "standard out!\nstandard out!"
exp_err = "standard err?\nstandard err?"
p OUT: out, EXP: exp_out unless out == exp_out
p ERR: out, EXP: exp_err unless err == exp_err
abort "bad" unless out == exp_out && err == exp_err
p :good!
I get:
10026 $ ./build/miniruby --disable=gems,did_you_mean -I./lib ./tool/runruby.rb --extout=build/.ext --archdir=build -- test_box.rb
run with RUBY_BOX=1 to repro the error
:good!
vs w/ box enabled:
10027 $ RUBY_BOX=1 ./build/miniruby --disable=gems,did_you_mean -I./lib ./tool/runruby.rb --extout=build/.ext --archdir=build -- test_box.rb
... box warnings ...
standard out!
standard err?
{OUT: "standard out!", EXP: "standard out!\nstandard out!"}
{ERR: "standard out!", EXP: "standard err?\nstandard err?"}
bad
Updated by mame (Yusuke Endoh) 13 days ago
- Status changed from Open to Assigned
- Assignee set to tagomoris (Satoshi Tagomori)
Actions