Issue #6010 has been updated by Akira Tanaka. Status changed from Open to Closed % Done changed from 0 to 100 Applied in changeset ruby-trunk:r45835. ---------- * lib/open-uri.rb (OpenURI.open_uri): Call StringIO#close only if the StringIO object is not closed yet. Reported by Jordi Massaguer Pla. [ruby-core:42538] [Bug #6010] ---------------------------------------- Bug #6010: open-uri not checking if io is closed https://bugs.ruby-lang.org/issues/6010#change-46551 * Author: Jordi Massaguer Pla * Status: Closed * Priority: Normal * Assignee: * Category: lib * Target version: Ruby 1.8.7 * ruby -v: ruby 1.8.7 (2011-12-28 patchlevel 357) [x86_64-linux] ---------------------------------------- Here is how to reproduce the bug: The following code works: open "http://rubygems.org/gems/curb-0.8.0.gem", "rb" do |io| Gem::Package.open io, 'r', nil do |pkg| end end The following code raises an exception: open "http://rubygems.org/gems/factory_girl_rails-1.2.0.gem", "rb" do |io| Gem::Package.open io, 'r', nil do |pkg| end end IOError: closed stream from /usr/lib64/ruby/1.8/open-uri.rb:137:in `close' from /usr/lib64/ruby/1.8/open-uri.rb:137:in `open_uri' from /usr/lib64/ruby/1.8/open-uri.rb:518:in `open' from /usr/lib64/ruby/1.8/open-uri.rb:30:in `open' from (irb):74 from :0 This is the patch that will make this work: --- /usr/lib64/ruby/1.8/open-uri.rb 2012-02-06 12:30:39.173000026 +0100 +++ /usr/lib64/ruby/1.8/open-uri.rb.patched 2012-02-06 12:33:33.552000027 +0100 @@ -134,7 +134,7 @@ begin yield io ensure - io.close + io.close if io && !io.closed? end else io -- https://bugs.ruby-lang.org/