From: plehoux@... Date: 2014-08-06T00:52:42+00:00 Subject: [ruby-core:64213] [ruby-trunk - Bug #10112] NET::IMAP fails to parse uid_search/search response with MODSEQ search criteria Issue #10112 has been updated by Philippe-Antoine Lehoux. Here is my patch to parse the response successfully. ~~~ require 'net/imap' ## # Fixing issue: NET::IMAP fails to parse uid_search/search response with MODSEQ search criteria # https://bugs.ruby-lang.org/issues/10112 module Net # :nodoc: class IMAP # :nodoc: class ResponseParser # :nodoc: def search_response token = match(T_ATOM) name = token.value.upcase token = lookahead if token.symbol == T_SPACE shift_token data = [] while true token = lookahead case token.symbol when T_LPAR shift_token match(T_ATOM) match(T_SPACE) match(T_NUMBER) match(T_RPAR) when T_NUMBER data.push(number) when T_CRLF break else shift_token end end else data = [] end return UntaggedResponse.new(name, data, @str) end end end end ~~~ ---------------------------------------- Bug #10112: NET::IMAP fails to parse uid_search/search response with MODSEQ search criteria https://bugs.ruby-lang.org/issues/10112#change-48208 * Author: Philippe-Antoine Lehoux * Status: Open * Priority: Normal * Assignee: Shugo Maeda * Category: lib * Target version: current: 2.2.0 * ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- ~~~ imap.examine('INBOX') imap.uid_search(['MODSEQ', 12345]) ~~~ NET::IMAP fails to parse uid_search/search response with MODSEQ search criteria (example above), here is the debug output I get from running it on GMAIL. ~~~ C: RUBY0002 EXAMINE INBOX S: * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Phishing $Forwarded Seen $has_cal $NotJunk receipt-handled NotJunk $NotPhishing $Junk Junk) S: * OK [PERMANENTFLAGS ()] Flags permitted. S: * OK [UIDVALIDITY 2] UIDs valid. S: * 3 EXISTS S: * 0 RECENT S: * OK [UIDNEXT 87222] Predicted next UID. S: * OK [HIGHESTMODSEQ 7667593] S: RUBY0002 OK [READ-ONLY] INBOX selected. (Success) C: RUBY0003 UID SEARCH MODSEQ 7666341 S: * OK [HIGHESTMODSEQ 7667593] S: * SEARCH 87216 87221 (MODSEQ 7667567) @str: "* SEARCH 87216 87221 (MODSEQ 7667567)\r\n" @pos: 22 @lex_state: EXPR_BEG @token.symbol: LPAR @token.value: "(" ~~~ -- https://bugs.ruby-lang.org/