Issue #6010 has been reported by Jordi Massaguer Pla.

----------------------------------------
Bug #6010: open-uri not checking if io is closed
https://bugs.ruby-lang.org/issues/6010

Author: Jordi Massaguer Pla
Status: Open
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




-- 
http://bugs.ruby-lang.org/