Project

General

Profile

Actions

Backport #2187

closed

Net::IMAP::ResponseParseError

Added by tommy (Masahiro Tomita) over 14 years ago. Updated about 13 years ago.

Status:
Closed
Assignee:
-
[ruby-dev:39452]

Description

=begin
とみたです。

RFC 3501 の resp-text-code は次のようになっていて atom だけでも OK なはずなのですが、

resp-text-code = "ALERT" /
"BADCHARSET" [SP "(" astring *(SP astring) ")" ] /
capability-data / "PARSE" /
"PERMANENTFLAGS" SP "("
[flag-perm (SP flag-perm)] ")" /
"READ-ONLY" / "READ-WRITE" / "TRYCREATE" /
"UIDNEXT" SP nz-number / "UIDVALIDITY" SP nz-number /
"UNSEEN" SP nz-number /
atom [SP 1
<any TEXT-CHAR except "]">]

net/imapd.rb の ResponseParser#resp_text_code() は atom の後に SP と TEXT が
必須になってしまっていて、"* OK [CLOSED] Previous mailbox closed." のような応答で
エラーになってしまいます。

/usr/local/ruby-1.8.7/lib/ruby/1.8/net/imap.rb:3124:in `parse_error': unexpected token RBRA (expected SPACE) (Net::IMAP::ResponseParseError)

次のパッチで直ると思います。

イマイチ綺麗じゃないですけど…

Index: lib/net/imap.rb

--- lib/net/imap.rb (revision 25262)
+++ lib/net/imap.rb (working copy)
@@ -2764,7 +2764,10 @@
match(T_SPACE)
result = ResponseCode.new(name, number)
else

  •      match(T_SPACE)
    
  •      if match(T_SPACE, T_RBRA).symbol == T_RBRA
    
  •        @lex_state = EXPR_RTEXT
    
  •        return ResponseCode.new(name, nil)
    
  •      end
         @lex_state = EXPR_CTEXT
         token = match(T_TEXT)
         @lex_state = EXPR_BEG
    

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0