diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-10-09 08:29:36 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-10-09 08:29:36 +0000 |
commit | 3e70f44ae9ab258b36df248e0f42539530fd8d72 (patch) | |
tree | e981193127eb6dac00ba7b0f1ccc463f49cfcb12 | |
parent | 29e9230bc5422689493f6fb43378a920246809df (diff) |
* lib/net/ftp.rb (parse257): refactor.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | lib/net/ftp.rb | 19 | ||||
-rw-r--r-- | test/net/ftp/test_ftp.rb | 20 |
3 files changed, 24 insertions, 19 deletions
@@ -1,3 +1,7 @@ +Fri Oct 9 17:29:07 2015 Shugo Maeda <[email protected]> + + * lib/net/ftp.rb (parse257): refactor. + Fri Oct 9 16:42:26 2015 Shugo Maeda <[email protected]> * lib/net/imap.rb: use frozen_string_literal: true. diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb index 2269b750d1..32eef46543 100644 --- a/lib/net/ftp.rb +++ b/lib/net/ftp.rb @@ -1246,24 +1246,7 @@ module Net if !resp.start_with?("257") raise FTPReplyError, resp end - if resp[3, 2] != ' "' - return "" - end - dirname = "" - i = 5 - n = resp.length - while i < n - c = resp[i, 1] - i = i + 1 - if c == '"' - if i > n or resp[i, 1] != '"' - break - end - i = i + 1 - end - dirname = dirname + c - end - return dirname + return resp.slice(/"(([^"]|"")*)"/, 1).to_s.gsub(/""/, '"') end private :parse257 diff --git a/test/net/ftp/test_ftp.rb b/test/net/ftp/test_ftp.rb index ae3649ec1c..cd84733b2c 100644 --- a/test/net/ftp/test_ftp.rb +++ b/test/net/ftp/test_ftp.rb @@ -1318,8 +1318,26 @@ EOF end end - private + def test_parse257 + ftp = Net::FTP.new + assert_equal('/foo/bar', + ftp.send(:parse257, '257 "/foo/bar" directory created')) + assert_equal('/foo/bar"baz', + ftp.send(:parse257, '257 "/foo/bar""baz" directory created')) + assert_equal('/foo/x"y"z', + ftp.send(:parse257, '257 "/foo/x""y""z" directory created')) + assert_equal('/foo/bar', + ftp.send(:parse257, '257 "/foo/bar" "comment"')) + assert_equal('', + ftp.send(:parse257, '257 "" directory created')) + assert_equal('', + ftp.send(:parse257, '257 directory created')) + assert_raise(Net::FTPReplyError) do + ftp.send(:parse257, "500 Syntax error") + end + end + private def create_ftp_server(sleep_time = nil) server = TCPServer.new(SERVER_ADDR, 0) |