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.
|
# Provide human-readable stringification of class state.
|
||||||
def inspect
|
def inspect
|
||||||
"#<#{self.class} #{@address}:#{@port} open=#{@started}>"
|
+"#<#{self.class} #{@address}:#{@port} open=#{@started}>"
|
||||||
end
|
end
|
||||||
|
|
||||||
# *WARNING*: This method causes a serious security hole.
|
# *WARNING*: This method causes a serious security hole.
|
||||||
|
@ -758,7 +758,7 @@ module Net
|
||||||
|
|
||||||
# Provide human-readable stringification of class state.
|
# Provide human-readable stringification of class state.
|
||||||
def inspect
|
def inspect
|
||||||
"#<#{self.class} #{@number}#{@deleted ? ' deleted' : ''}>"
|
+"#<#{self.class} #{@number}#{@deleted ? ' deleted' : ''}>"
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -799,7 +799,7 @@ module Net
|
||||||
#
|
#
|
||||||
# This method raises a POPError if an error occurs.
|
# 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?
|
if block_given?
|
||||||
@command.retr(@number, &block)
|
@command.retr(@number, &block)
|
||||||
nil
|
nil
|
||||||
|
@ -819,7 +819,7 @@ module Net
|
||||||
# The optional +dest+ argument is obsolete.
|
# The optional +dest+ argument is obsolete.
|
||||||
#
|
#
|
||||||
# This method raises a POPError if an error occurs.
|
# This method raises a POPError if an error occurs.
|
||||||
def top(lines, dest = '')
|
def top(lines, dest = +'')
|
||||||
@command.top(@number, lines) do |chunk|
|
@command.top(@number, lines) do |chunk|
|
||||||
dest << chunk
|
dest << chunk
|
||||||
end
|
end
|
||||||
|
@ -831,7 +831,7 @@ module Net
|
||||||
# The optional +dest+ argument is obsolete.
|
# The optional +dest+ argument is obsolete.
|
||||||
#
|
#
|
||||||
# This method raises a POPError if an error occurs.
|
# This method raises a POPError if an error occurs.
|
||||||
def header(dest = '')
|
def header(dest = +'')
|
||||||
top(0, dest)
|
top(0, dest)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -898,7 +898,7 @@ module Net
|
||||||
attr_reader :socket
|
attr_reader :socket
|
||||||
|
|
||||||
def inspect
|
def inspect
|
||||||
"#<#{self.class} socket=#{@socket}>"
|
+"#<#{self.class} socket=#{@socket}>"
|
||||||
end
|
end
|
||||||
|
|
||||||
def auth(account, password)
|
def auth(account, password)
|
||||||
|
|
|
@ -64,6 +64,35 @@ class TestPOP < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
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)
|
def pop_test(apop=false)
|
||||||
host = 'localhost'
|
host = 'localhost'
|
||||||
server = TCPServer.new(host, 0)
|
server = TCPServer.new(host, 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue