Bug #6010
closedopen-uri not checking if io is closed
Description
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
-
elseio.close if io && !io.closed? end
io
Updated by akr (Akira Tanaka) over 10 years ago
- 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]