Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
✨ 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 ruby#333. This _should_ be backward compatible: previously these inputs would raise an exception.
- Loading branch information