summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-21 12:56:17 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-05-21 12:56:17 +0000
commitf6fb038dee4a385e7d4e3b2816a96157401953b0 (patch)
treeea99caf246e2cbb70d89e279d56ab3d6da687df0 /lib
parentacb10b8c32a7235b56e4f4346e8ed6bf5026166a (diff)
* lib/net/ftp.rb (Net::FTP#retrbinary): close only if conn is not nil
because transfercmd may fail and return nil. * lib/net/ftp.rb (Net::FTP#retrlines): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/net/ftp.rb23
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index 8694b09063..502783955b 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -494,7 +494,7 @@ module Net
conn.read_timeout = 1
conn.read
ensure
- conn.close
+ conn.close if conn
end
voidresp
end
@@ -510,16 +510,19 @@ module Net
def retrlines(cmd) # :yield: line
synchronize do
with_binary(false) do
- conn = transfercmd(cmd)
- loop do
- line = conn.gets
- break if line == nil
- yield(line.sub(/\r?\n\z/, ""), !line.match(/\n\z/).nil?)
+ begin
+ conn = transfercmd(cmd)
+ loop do
+ line = conn.gets
+ break if line == nil
+ yield(line.sub(/\r?\n\z/, ""), !line.match(/\n\z/).nil?)
+ end
+ conn.shutdown(Socket::SHUT_WR)
+ conn.read_timeout = 1
+ conn.read
+ ensure
+ conn.close if conn
end
- conn.shutdown(Socket::SHUT_WR)
- conn.read_timeout = 1
- conn.read
- conn.close
voidresp
end
end