ruby-changes:52235
From: nagachika <ko1@a...>
Date: Sat, 18 Aug 2018 17:35:49 +0900 (JST)
Subject: [ruby-changes:52235] nagachika:r64443 (ruby_2_5): merge revision(s) 62099: [Backport #14416]
nagachika 2018-08-18 17:35:42 +0900 (Sat, 18 Aug 2018) New Revision: 64443 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=64443 Log: merge revision(s) 62099: [Backport #14416] 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 Modified directories: branches/ruby_2_5/ Modified files: branches/ruby_2_5/lib/net/pop.rb branches/ruby_2_5/test/net/pop/test_pop.rb branches/ruby_2_5/version.h Index: ruby_2_5/version.h =================================================================== --- ruby_2_5/version.h (revision 64442) +++ ruby_2_5/version.h (revision 64443) @@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_5/version.h#L1 #define RUBY_VERSION "2.5.2" #define RUBY_RELEASE_DATE "2018-08-18" -#define RUBY_PATCHLEVEL 81 +#define RUBY_PATCHLEVEL 82 #define RUBY_RELEASE_YEAR 2018 #define RUBY_RELEASE_MONTH 8 Index: ruby_2_5/test/net/pop/test_pop.rb =================================================================== --- ruby_2_5/test/net/pop/test_pop.rb (revision 64442) +++ ruby_2_5/test/net/pop/test_pop.rb (revision 64443) @@ -64,6 +64,35 @@ class TestPOP < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/net/pop/test_pop.rb#L64 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) Index: ruby_2_5/lib/net/pop.rb =================================================================== --- ruby_2_5/lib/net/pop.rb (revision 64442) +++ ruby_2_5/lib/net/pop.rb (revision 64443) @@ -467,7 +467,7 @@ module Net https://github.com/ruby/ruby/blob/trunk/ruby_2_5/lib/net/pop.rb#L467 # 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 https://github.com/ruby/ruby/blob/trunk/ruby_2_5/lib/net/pop.rb#L758 # 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 https://github.com/ruby/ruby/blob/trunk/ruby_2_5/lib/net/pop.rb#L799 # # 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 https://github.com/ruby/ruby/blob/trunk/ruby_2_5/lib/net/pop.rb#L819 # 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 https://github.com/ruby/ruby/blob/trunk/ruby_2_5/lib/net/pop.rb#L831 # 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 https://github.com/ruby/ruby/blob/trunk/ruby_2_5/lib/net/pop.rb#L898 attr_reader :socket def inspect - "#<#{self.class} socket=#{@socket}>" + +"#<#{self.class} socket=#{@socket}>" end def auth(account, password) Index: ruby_2_5 =================================================================== --- ruby_2_5 (revision 64442) +++ ruby_2_5 (revision 64443) Property changes on: ruby_2_5 ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /trunk:r62099 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/