aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-06 09:21:35 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-06 09:21:35 +0000
commite56d34001fd924a4b62f0c846f55174bb8c6d3c8 (patch)
tree3d9a3b7230457e2aeb91bca12b066e5b5de50ddc
parent7d34bdb81d40f8a9bf61cef8e839093815b7211f (diff)
downloadruby-e56d34001fd924a4b62f0c846f55174bb8c6d3c8.tar.gz
net/ftp: fix FrozenError in BufferedSocket
I noticed this bug while working on something else with RUBYOPT=-d on, existing test cases all passed with it. Note: I use String.new because it is the local style, here, I prefer +'' (or ''.b, for a future commit) * lib/net/ftp.rb (BufferedSocket#read): use String.new * test/net/ftp/test_buffered_socket.rb (test_read_nil): new test [ruby-core:84675] [Bug #14323] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61639 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--lib/net/ftp.rb2
-rw-r--r--test/net/ftp/test_buffered_socket.rb6
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb
index ee7f029f88..c3ee47ef4d 100644
--- a/lib/net/ftp.rb
+++ b/lib/net/ftp.rb
@@ -1428,7 +1428,7 @@ module Net
s = super(len, String.new, true)
return s.empty? ? nil : s
else
- result = ""
+ result = String.new
while s = super(DEFAULT_BLOCKSIZE, String.new, true)
break if s.empty?
result << s
diff --git a/test/net/ftp/test_buffered_socket.rb b/test/net/ftp/test_buffered_socket.rb
index 3cc46fa555..875c53f4e0 100644
--- a/test/net/ftp/test_buffered_socket.rb
+++ b/test/net/ftp/test_buffered_socket.rb
@@ -33,6 +33,12 @@ class BufferedSocketTest < Test::Unit::TestCase
assert_equal("bar", sock.gets)
end
+ def test_read_nil
+ sock = create_buffered_socket("foo\nbar")
+ assert_equal("foo\nbar", sock.read)
+ assert_equal("", sock.read)
+ end
+
private
def create_buffered_socket(s)