ruby-changes:46729
From: shugo <ko1@a...>
Date: Mon, 22 May 2017 15:13:17 +0900 (JST)
Subject: [ruby-changes:46729] shugo:r58844 (trunk): net/imap: separate @continuation_request_exception from @exception
shugo 2017-05-22 15:13:11 +0900 (Mon, 22 May 2017) New Revision: 58844 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=58844 Log: net/imap: separate @continuation_request_exception from @exception Otherwise literal data will be sent even if NO response is returned because @exception is set to nil in receive_responses. Modified files: trunk/lib/net/imap.rb trunk/test/net/imap/test_imap.rb Index: lib/net/imap.rb =================================================================== --- lib/net/imap.rb (revision 58843) +++ lib/net/imap.rb (revision 58844) @@ -1100,6 +1100,7 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/imap.rb#L1100 @tagged_response_arrival = new_cond @continued_command_tag = nil @continuation_request_arrival = new_cond + @continuation_request_exception = nil @idle_done_cond = nil @logout_command_tag = nil @debug_output_bol = true @@ -1165,7 +1166,8 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/imap.rb#L1166 when @logout_command_tag return when @continued_command_tag - @exception = RESPONSE_ERRORS[resp.name].new(resp) + @continuation_request_exception = + RESPONSE_ERRORS[resp.name].new(resp) @continuation_request_arrival.signal end when UntaggedResponse @@ -1351,14 +1353,19 @@ module Net https://github.com/ruby/ruby/blob/trunk/lib/net/imap.rb#L1353 end def send_literal(str, tag) - put_string("{" + str.bytesize.to_s + "}" + CRLF) - @continued_command_tag = tag - begin - @continuation_request_arrival.wait - raise @exception if @exception - put_string(str) - ensure - @continued_command_tag = nil + synchronize do + put_string("{" + str.bytesize.to_s + "}" + CRLF) + @continued_command_tag = tag + @continuation_request_exception = nil + begin + @continuation_request_arrival.wait + e = @continuation_request_exception || @exception + raise e if e + put_string(str) + ensure + @continued_command_tag = nil + @continuation_request_exception = nil + end end end Index: test/net/imap/test_imap.rb =================================================================== --- test/net/imap/test_imap.rb (revision 58843) +++ test/net/imap/test_imap.rb (revision 58844) @@ -582,7 +582,7 @@ EOF https://github.com/ruby/ruby/blob/trunk/test/net/imap/test_imap.rb#L582 received_mail = sock.read(size) sock.gets sock.print("RUBY0001 OK APPEND completed\r\n") - sock.gets + requests.push(sock.gets) sock.print("* BYE terminating connection\r\n") sock.print("RUBY0002 OK LOGOUT completed\r\n") ensure @@ -598,6 +598,8 @@ EOF https://github.com/ruby/ruby/blob/trunk/test/net/imap/test_imap.rb#L598 assert_equal("RUBY0001 APPEND INBOX {#{mail.size}}\r\n", requests[0]) assert_equal(mail, received_mail) imap.logout + assert_equal(2, requests.length) + assert_equal("RUBY0002 LOGOUT\r\n", requests[1]) ensure imap.disconnect if imap end @@ -619,10 +621,9 @@ EOF https://github.com/ruby/ruby/blob/trunk/test/net/imap/test_imap.rb#L621 sock = server.accept begin sock.print("* OK test server\r\n") - line = sock.gets - requests.push(line) + requests.push(sock.gets) sock.print("RUBY0001 NO Mailbox doesn't exist\r\n") - sock.gets + requests.push(sock.gets) sock.print("* BYE terminating connection\r\n") sock.print("RUBY0002 OK LOGOUT completed\r\n") ensure @@ -639,6 +640,8 @@ EOF https://github.com/ruby/ruby/blob/trunk/test/net/imap/test_imap.rb#L640 assert_equal(1, requests.length) assert_equal("RUBY0001 APPEND INBOX {#{mail.size}}\r\n", requests[0]) imap.logout + assert_equal(2, requests.length) + assert_equal("RUBY0002 LOGOUT\r\n", requests[1]) ensure imap.disconnect if imap end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/