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

✨ Enable parenthesized lists in search criteria #345

Merged
merged 1 commit into from
Nov 8, 2024

Commits on Nov 8, 2024

  1. ✨ Enable parenthesized lists in search criteria

    This affects `#search`, `#uid_search`, `#sort`, `#uid_sort`, `#thread`,
    and `#uid_thread`.
    
    Prior to this, sending a parenthesized list in the search criteria for
    any of these commands required the use of strings, which are converted
    to `RawData`, which has security implications with untrusted inputs.
    
    With this change, arrays will only be converted into SequenceSet when
    _every_ element in the array is a valid SequenceSet input.  Otherwise,
    the array will be left alone, which allows us to send parenthesized
    lists without using strings and RawData.
    
    For example, some searches this change enables:
    
    * Combining criteria to pass into `OR`, `NOT`, `FUZZY`, etc.
      * `search(["not", %w(flagged unread)])`
        converts to: `SEARCH not (flagged unread)`
    * Adding return options (we should also add a return kwarg).
      * `uid_search(["RETURN", ["PARTIAL", 1..50], "UID", 12345..67890])`
        converts to: `UID SEARCH RETURN (PARTIAL 1:50) UID 12345:67890`
      * Note that `PARTIAL` supports negative ranges, which can't be coerced
        to SequenceSet.  They'll need to be sent as strings, for now.
      * Note that searches with return options should return ESEARCH
        results, which are currently unsupported.  See #333.
    
    This _should_ be backward compatible: previously these inputs would
    raise an exception.
    nevans committed Nov 8, 2024
    Configuration menu
    Copy the full SHA
    1d9afd5 View commit details
    Browse the repository at this point in the history