* lib/net/imap.rb (receive_responses): does not hang when an unexpected BYE

response received.  fixed [ruby-core:27944].  Thanks, Bob Potter.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shugo 2010-02-06 13:57:10 +00:00
Родитель bc885aeae6
Коммит 69c3348b79
2 изменённых файлов: 31 добавлений и 2 удалений

Просмотреть файл

@ -1017,7 +1017,8 @@ module Net
end
def receive_responses
while true
connection_closed = false
until connection_closed
synchronize do
@exception = nil
end
@ -1054,7 +1055,7 @@ module Net
if resp.name == "BYE" && @logout_command_tag.nil?
@sock.close
@exception = ByeResponseError.new(resp)
break
connection_closed = true
end
when ContinuationRequest
@continuation_request_arrival.signal

Просмотреть файл

@ -279,6 +279,34 @@ class IMAPTest < Test::Unit::TestCase
end
end
def test_unexpected_bye
server = TCPServer.new(0)
port = server.addr[1]
Thread.start do
begin
sock = server.accept
begin
sock.print("* OK Gimap ready for requests from 75.101.246.151 33if2752585qyk.26\r\n")
sock.gets
sock.print("* BYE System Error 33if2752585qyk.26\r\n")
ensure
sock.close
end
rescue
end
end
begin
begin
imap = Net::IMAP.new("localhost", :port => port)
assert_raise(Net::IMAP::ByeResponseError) do
imap.login("user", "password")
end
end
ensure
server.close
end
end
private
def imaps_test