summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/net/ftp.rb31
-rw-r--r--version.h2
3 files changed, 23 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 5a98b9ac1d..a64780ad91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Jun 27 17:05:23 2014 Tanaka Akira <akr@fsij.org>
+
+ * lib/net/ftp.rb (transfercmd): Close TCP server socket even if an
+ exception occur.
+
Fri Jun 27 17:02:36 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
* thread_win32.c (rb_w32_stack_overflow_handler): use Structured
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index 805321c9d1..c2cf5f3af4 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -419,23 +419,26 @@ module Net
end
else
sock = makeport
- if @resume and rest_offset
- resp = sendcmd("REST " + rest_offset.to_s)
- if resp[0] != ?3
+ begin
+ if @resume and rest_offset
+ resp = sendcmd("REST " + rest_offset.to_s)
+ if resp[0] != ?3
+ raise FTPReplyError, resp
+ end
+ end
+ resp = sendcmd(cmd)
+ # skip 2XX for some ftp servers
+ resp = getresp if resp[0] == ?2
+ if resp[0] != ?1
raise FTPReplyError, resp
end
+ conn = BufferedSocket.new(sock.accept)
+ conn.read_timeout = @read_timeout
+ sock.shutdown(Socket::SHUT_WR) rescue nil
+ sock.read rescue nil
+ ensure
+ sock.close
end
- resp = sendcmd(cmd)
- # skip 2XX for some ftp servers
- resp = getresp if resp[0] == ?2
- if resp[0] != ?1
- raise FTPReplyError, resp
- end
- conn = BufferedSocket.new(sock.accept)
- conn.read_timeout = @read_timeout
- sock.shutdown(Socket::SHUT_WR) rescue nil
- sock.read rescue nil
- sock.close
end
return conn
end
diff --git a/version.h b/version.h
index 80f1bd6c60..0b00549dcc 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2014-06-27"
-#define RUBY_PATCHLEVEL 501
+#define RUBY_PATCHLEVEL 502
#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 6