Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix IMAP search issues #1611

Merged
merged 1 commit into from
Jun 5, 2024
Merged

Fix IMAP search issues #1611

merged 1 commit into from
Jun 5, 2024

Commits on May 21, 2024

  1. Fix IMAP search issues

    The code had several issues with existing IMAP UID search:
    * net-imap <= v0.3 returns `nil` when the server returns nothing.
      (>= v0.4 returns an empty array when the server returns nothing.)
    * net-imap v0.4.8 and v0.4.9 return a _frozen_ `SearchResult`.
      `SearchResult` inherits from `Array`, but because it's frozen,
      mutating it with `reverse!` results in an exception.
      See ruby/net-imap#262.
      (v0.4.10 and above doesn't freeze SearchResult.)
    * newer net-imap (>= 0.5) will support servers that send `ESEARCH`
      results, but those will be returned as an `ESearchResult` struct
      (probably frozen).  `IMAP4rev1` servers shouldn't return `ESEARCH`
      unless the client has activated that extension, but `IMAP4rev2`
      servers will _always_ return `ESEARCH`.
    * RFC3501 says nothing about sorting the UIDs that come back from
      `UID SEARCH`.  Almost all servers do return sorted UIDs, most of the
      time.  But it isn't 100% reliable.
    
    The fix is simple:
    * use `#to_a` to convert both `nil` and `ESearchResult` into an array.
    * use `#sort` to ensure the UIDs are sorted.  This also returns a new
      array, without mutating the original (which may be frozen).
    nevans committed May 21, 2024
    Configuration menu
    Copy the full SHA
    c779866 View commit details
    Browse the repository at this point in the history