From 5be34d6a3310065850c0c530db6936415124b5d9 Mon Sep 17 00:00:00 2001 From: "NARUSE, Yui" Date: Tue, 10 Dec 2019 19:25:00 +0900 Subject: ensure to close the data connection [Bug #16413] --- lib/net/ftp.rb | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb index fbee888685..b20f84b206 100644 --- a/lib/net/ftp.rb +++ b/lib/net/ftp.rb @@ -686,14 +686,20 @@ module Net end synchronize do with_binary(true) do - conn = transfercmd(cmd) - loop do - buf = file.read(blocksize) - break if buf == nil - conn.write(buf) - yield(buf) if block_given? + begin + conn = transfercmd(cmd) + loop do + buf = file.read(blocksize) + break if buf == nil + conn.write(buf) + yield(buf) if block_given? + end + conn.shutdown(Socket::SHUT_WR) + conn.read_timeout = 1 + conn.read + ensure + conn.close if conn end - conn.close voidresp end end @@ -715,17 +721,23 @@ module Net def storlines(cmd, file) # :yield: line synchronize do with_binary(false) do - conn = transfercmd(cmd) - loop do - buf = file.gets - break if buf == nil - if buf[-2, 2] != CRLF - buf = buf.chomp + CRLF + begin + conn = transfercmd(cmd) + loop do + buf = file.gets + break if buf == nil + if buf[-2, 2] != CRLF + buf = buf.chomp + CRLF + end + conn.write(buf) + yield(buf) if block_given? end - conn.write(buf) - yield(buf) if block_given? + conn.shutdown(Socket::SHUT_WR) + conn.read_timeout = 1 + conn.read + ensure + conn.close if conn end - conn.close voidresp end end -- cgit v1.2.3