You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
0 commit comments