aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/net/imap.rb11
-rw-r--r--test/net/imap/test_imap.rb2
-rw-r--r--test/net/imap/test_imap_response_parser.rb10
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