diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-05-05 16:38:53 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-05-05 16:38:53 +0000 |
commit | 0c3d51318538006d2c4393fb96ead184914e5d08 (patch) | |
tree | 4928341e4894b5b7b7d60ae8975ff16d692eb5d6 | |
parent | 5ab5d9219183d10947a2d95865fd87b962f065a7 (diff) | |
download | ruby-0c3d51318538006d2c4393fb96ead184914e5d08.tar.gz |
* 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]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/open-uri.rb | 2 | ||||
-rw-r--r-- | test/open-uri/test_open-uri.rb | 23 |
3 files changed, 30 insertions, 1 deletions
@@ -1,3 +1,9 @@ +Tue May 6 01:28:14 2014 Tanaka Akira <akr@fsij.org> + + * 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] + Tue May 6 01:08:01 2014 Koichi Sasada <ko1@atdot.net> * benchmark/driver.rb: define File::NULL if not defiend and /dev/null diff --git a/lib/open-uri.rb b/lib/open-uri.rb index 264c8501cf..f9822a9847 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -155,7 +155,7 @@ module OpenURI if io.respond_to? :close! io.close! # Tempfile else - io.close + io.close if !io.closed? end end else diff --git a/test/open-uri/test_open-uri.rb b/test/open-uri/test_open-uri.rb index 21dd96960a..c6ba652a6b 100644 --- a/test/open-uri/test_open-uri.rb +++ b/test/open-uri/test_open-uri.rb @@ -163,6 +163,29 @@ class TestOpenURI < Test::Unit::TestCase } end + def test_close_in_block_small + with_http {|srv, dr, url| + srv.mount_proc("/close200", lambda { |req, res| res.body = "close200" } ) + assert_nothing_raised { + open("#{url}/close200") {|f| + f.close + } + } + } + end + + def test_close_in_block_big + with_http {|srv, dr, url| + content = "close200big"*10240 + srv.mount_proc("/close200big", lambda { |req, res| res.body = content } ) + assert_nothing_raised { + open("#{url}/close200big") {|f| + f.close + } + } + } + end + def test_header myheader1 = 'barrrr' myheader2 = nil |