1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

net/pop: make modified strings mutable

Thanks to Michael Zimmerman for the bug report

* lib/net/pop.rb: make modified strings mutable
  [ruby-core:85210] [Bug #14416]
* test/net/pop/test_pop.rb: new test

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2018-01-30 00:22:22 +00:00
parent f65c682fbd
commit 7830a950ef
2 changed files with 35 additions and 6 deletions

View file

@ -467,7 +467,7 @@ module Net
# Provide human-readable stringification of class state.
def inspect
"#<#{self.class} #{@address}:#{@port} open=#{@started}>"
+"#<#{self.class} #{@address}:#{@port} open=#{@started}>"
end
# *WARNING*: This method causes a serious security hole.
@ -758,7 +758,7 @@ module Net
# Provide human-readable stringification of class state.
def inspect
"#<#{self.class} #{@number}#{@deleted ? ' deleted' : ''}>"
+"#<#{self.class} #{@number}#{@deleted ? ' deleted' : ''}>"
end
#
@ -799,7 +799,7 @@ module Net
#
# This method raises a POPError if an error occurs.
#
def pop( dest = '', &block ) # :yield: message_chunk
def pop( dest = +'', &block ) # :yield: message_chunk
if block_given?
@command.retr(@number, &block)
nil
@ -819,7 +819,7 @@ module Net
# The optional +dest+ argument is obsolete.
#
# This method raises a POPError if an error occurs.
def top(lines, dest = '')
def top(lines, dest = +'')
@command.top(@number, lines) do |chunk|
dest << chunk
end
@ -831,7 +831,7 @@ module Net
# The optional +dest+ argument is obsolete.
#
# This method raises a POPError if an error occurs.
def header(dest = '')
def header(dest = +'')
top(0, dest)
end
@ -898,7 +898,7 @@ module Net
attr_reader :socket
def inspect
"#<#{self.class} socket=#{@socket}>"
+"#<#{self.class} socket=#{@socket}>"
end
def auth(account, password)

View file

@ -64,6 +64,35 @@ class TestPOP < Test::Unit::TestCase
end
end
def test_popmail
# totally not representative of real messages, but
# enough to test frozen bugs
lines = [ "[ruby-core:85210]" , "[Bug #14416]" ].freeze
command = Object.new
command.instance_variable_set(:@lines, lines)
def command.retr(n)
@lines.each { |l| yield "#{l}\r\n" }
end
def command.top(number, nl)
@lines.each do |l|
yield "#{l}\r\n"
break if (nl -= 1) <= 0
end
end
net_pop = :unused
popmail = Net::POPMail.new(1, 123, net_pop, command)
res = popmail.pop
assert_equal "[ruby-core:85210]\r\n[Bug #14416]\r\n", res
assert_not_predicate res, :frozen?
res = popmail.top(1)
assert_equal "[ruby-core:85210]\r\n", res
assert_not_predicate res, :frozen?
end
def pop_test(apop=false)
host = 'localhost'
server = TCPServer.new(host, 0)