diff options
-rw-r--r-- | lib/net/imap.rb | 11 | ||||
-rw-r--r-- | test/net/imap/test_imap.rb | 2 | ||||
-rw-r--r-- | test/net/imap/test_imap_response_parser.rb | 10 |
3 files changed, 18 insertions, 5 deletions
diff --git a/lib/net/imap.rb b/lib/net/imap.rb index dc185183cd..bb6754c732 100644 --- a/lib/net/imap.rb +++ b/lib/net/imap.rb @@ -964,7 +964,7 @@ module Net @idle_done_cond.wait(timeout) @idle_done_cond = nil if @receiver_thread_terminating - raise Net::IMAP::Error, "connection closed" + raise @exception || Net::IMAP::Error.new("connection closed") end ensure unless @receiver_thread_terminating @@ -2268,8 +2268,13 @@ module Net def continue_req match(T_PLUS) - match(T_SPACE) - return ContinuationRequest.new(resp_text, @str) + token = lookahead + if token.symbol == T_SPACE + shift_token + return ContinuationRequest.new(resp_text, @str) + else + return ContinuationRequest.new(ResponseText.new(nil, ""), @str) + end end def response_untagged diff --git a/test/net/imap/test_imap.rb b/test/net/imap/test_imap.rb index e4466fe8dd..0f64e882cc 100644 --- a/test/net/imap/test_imap.rb +++ b/test/net/imap/test_imap.rb @@ -432,7 +432,7 @@ class IMAPTest < Test::Unit::TestCase c.signal end end - assert_raise(Net::IMAP::Error) do + assert_raise(EOFError) do imap.idle do |res| m.synchronize do in_idle = true diff --git a/test/net/imap/test_imap_response_parser.rb b/test/net/imap/test_imap_response_parser.rb index b8c6db86cd..7aac2786fe 100644 --- a/test/net/imap/test_imap_response_parser.rb +++ b/test/net/imap/test_imap_response_parser.rb @@ -60,7 +60,7 @@ EOF def test_flag_xlist_inbox parser = Net::IMAP::ResponseParser.new - response = parser.parse(<<EOF.gsub(/\n/, "\r\n").taint) + response = parser.parse(<<EOF.gsub(/\n/, "\r\n").taint) * XLIST (\\Inbox) "." "INBOX" EOF assert_equal [:Inbox], response.data.attr @@ -311,4 +311,12 @@ EOF response = parser.parse("* 1 FETCH (FLAGS (\Seen) MODSEQ (12345) UID 5)\r\n") assert_equal(12345, response.data.attr["MODSEQ"]) end + + def test_continuation_request_without_response_text + parser = Net::IMAP::ResponseParser.new + response = parser.parse("+\r\n") + assert_instance_of(Net::IMAP::ContinuationRequest, response) + assert_equal(nil, response.data.code) + assert_equal("", response.data.text) + end end |