From 6594623f623a0982da62cc105094da0701d499da Mon Sep 17 00:00:00 2001 From: Lars Kanis Date: Mon, 16 Aug 2021 13:11:30 +0200 Subject: Fix Marshal.dump(closed_io) to raise TypeError and allow encoding on closed IO Mashalling a closed IO object raised "closed stream (IOError)" before instead of TypeError. This changes IO#(in|ex)ternal_encoding to still return the encoding even if the underlying FD is closed. Fixes bug #18077 --- test/ruby/test_io.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index f7240c4cf6..a90140fd0b 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -3991,6 +3991,18 @@ __END__ } end + def test_marshal_closed_io + bug18077 = '[ruby-core:104927] [Bug #18077]' + r, w = IO.pipe + r.close; w.close + assert_raise(TypeError, bug18077) {Marshal.dump(r)} + + class << r + undef_method :closed? + end + assert_raise(TypeError, bug18077) {Marshal.dump(r)} + end + def test_stdout_to_closed_pipe EnvUtil.invoke_ruby(["-e", "loop {puts :ok}"], "", true, true) do |in_p, out_p, err_p, pid| -- cgit v1.2.3