[ruby-core:124705] [Ruby Bug#21867] enabling Ruby::Box changes puts/warn to no longer use $stdout/$stderr
Issue #21867 has been reported by zenspider (Ryan Davis). ---------------------------------------- Bug #21867: enabling Ruby::Box changes puts/warn to no longer use $stdout/$stderr https://bugs.ruby-lang.org/issues/21867 * Author: zenspider (Ryan Davis) * Status: Open * ruby -v: 4.0.1+ * Backport: 4.0: UNKNOWN ---------------------------------------- On 4.0.1 or latest build as of 2026-02-06, given: ```ruby 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 ``` -- https://bugs.ruby-lang.org/
participants (1)
-
zenspider (Ryan Davis)