✨ Enable parenthesized lists in search criteria #345
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 validSequenceSet
input. Otherwise, the array will be left alone, which allows us to send parenthesized lists without using strings andRawData
.For example, some searches this change enables:
OR
,NOT
,FUZZY
, etc.search(["not", %w(flagged unread)])
converts to:SEARCH not (flagged unread)
return
kwarg).uid_search(["RETURN", ["PARTIAL", 1..50], "UID", 12345..67890]
converts to:UID SEARCH RETURN (PARTIAL 1:50) UID 12345:67890
PARTIAL
supports negative ranges, which can't be coerced to SequenceSet.They'll need to be sent as strings, for now.
ESEARCH
results, which are currently unsupported.See ✨ Add basic ESearch support #333.
This should be backward compatible: previously these inputs would simply raise an exception.