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:
parent
f65c682fbd
commit
7830a950ef
2 changed files with 35 additions and 6 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue