Commit 1d9afd5
committed
✨ 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.1 parent 799cc94 commit 1d9afd5
2 files changed
+31
-6
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1949 | 1949 | | |
1950 | 1950 | | |
1951 | 1951 | | |
1952 | | - | |
| 1952 | + | |
| 1953 | + | |
| 1954 | + | |
1953 | 1955 | | |
1954 | 1956 | | |
| 1957 | + | |
| 1958 | + | |
1955 | 1959 | | |
1956 | 1960 | | |
1957 | 1961 | | |
| |||
1976 | 1980 | | |
1977 | 1981 | | |
1978 | 1982 | | |
1979 | | - | |
| 1983 | + | |
1980 | 1984 | | |
1981 | | - | |
| 1985 | + | |
1982 | 1986 | | |
1983 | | - | |
| 1987 | + | |
1984 | 1988 | | |
1985 | | - | |
| 1989 | + | |
1986 | 1990 | | |
1987 | 1991 | | |
1988 | 1992 | | |
| |||
3208 | 3212 | | |
3209 | 3213 | | |
3210 | 3214 | | |
3211 | | - | |
| 3215 | + | |
3212 | 3216 | | |
3213 | 3217 | | |
3214 | 3218 | | |
3215 | 3219 | | |
| 3220 | + | |
| 3221 | + | |
| 3222 | + | |
| 3223 | + | |
| 3224 | + | |
| 3225 | + | |
| 3226 | + | |
| 3227 | + | |
| 3228 | + | |
3216 | 3229 | | |
3217 | 3230 | | |
3218 | 3231 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1242 | 1242 | | |
1243 | 1243 | | |
1244 | 1244 | | |
| 1245 | + | |
| 1246 | + | |
| 1247 | + | |
| 1248 | + | |
| 1249 | + | |
| 1250 | + | |
| 1251 | + | |
| 1252 | + | |
| 1253 | + | |
| 1254 | + | |
| 1255 | + | |
| 1256 | + | |
1245 | 1257 | | |
1246 | 1258 | | |
1247 | 1259 | | |
| |||
0 commit comments