diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/net/imap.rb | 4 | ||||
-rw-r--r-- | test/net/imap/test_imap.rb | 19 |
3 files changed, 29 insertions, 0 deletions
@@ -1,3 +1,9 @@ +Fri Mar 16 14:10:45 2012 Shugo Maeda <shugo@ruby-lang.org> + + * lib/net/imap.rb (initialize): raise Net::IMAP::Error when the + connection is closed without a greeting response. + [ruby-core:40938] [Bug #5616] + Fri Mar 16 13:50:12 2012 Shugo Maeda <shugo@ruby-lang.org> * lib/net/imap.rb (rfc822_text): ignore [] after RFC822. diff --git a/lib/net/imap.rb b/lib/net/imap.rb index b2193dbf93..6e88fb96e4 100644 --- a/lib/net/imap.rb +++ b/lib/net/imap.rb @@ -1065,6 +1065,10 @@ module Net @exception = nil @greeting = get_response + if @greeting.nil? + @sock.close + raise Error, "connection closed" + end if @greeting.name == "BYE" @sock.close raise ByeResponseError, @greeting diff --git a/test/net/imap/test_imap.rb b/test/net/imap/test_imap.rb index cf179c85d8..df9cd8b8a2 100644 --- a/test/net/imap/test_imap.rb +++ b/test/net/imap/test_imap.rb @@ -418,6 +418,25 @@ class IMAPTest < Test::Unit::TestCase end end + def test_connection_closed_without_greeting + server = create_tcp_server + port = server.addr[1] + Thread.start do + begin + sock = server.accept + sock.close + rescue + end + end + begin + assert_raise(Net::IMAP::Error) do + Net::IMAP.new(SERVER_ADDR, :port => port) + end + ensure + server.close + end + end + def test_default_port assert_equal(143, Net::IMAP.default_port) assert_equal(143, Net::IMAP.default_imap_port) |