dovecot: Only the first value in a messageset was verified to be...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Feb 11 19:58:49 EET 2008
details: http://hg.dovecot.org/dovecot/rev/0fe19a3d82a3
changeset: 7225:0fe19a3d82a3
user: Timo Sirainen <tss at iki.fi>
date: Mon Feb 11 19:58:43 2008 +0200
description:
Only the first value in a messageset was verified to be valid, the rest were
ignored (e.g. 1,100000 passed).
diffstat:
1 file changed, 25 insertions(+), 15 deletions(-)
src/imap/imap-search.c | 40 +++++++++++++++++++++++++---------------
diffs (56 lines):
diff -r d5116fa2c88f -r 0fe19a3d82a3 src/imap/imap-search.c
--- a/src/imap/imap-search.c Mon Feb 11 17:20:14 2008 +0200
+++ b/src/imap/imap-search.c Mon Feb 11 19:58:43 2008 +0200
@@ -551,27 +551,37 @@ imap_search_args_build(pool_t pool, stru
return first_sarg;
}
-static int imap_search_get_msgset_arg(struct client_command_context *cmd,
- const char *messageset,
- struct mail_search_arg **arg_r,
- const char **error_r)
-{
- struct mail_search_arg *arg;
-
- arg = p_new(cmd->pool, struct mail_search_arg, 1);
- arg->type = SEARCH_SEQSET;
- arg->value.seqset = imap_messageset_parse(cmd->pool, messageset);
+static bool
+msgset_is_valid(const struct mail_search_seqset *set, uint32_t messages_count)
+{
/* when there are no messages, all messagesets are invalid.
if there's at least one message:
- * gives seq1 = seq2 = (uint32_t)-1
- n:* should work if n <= messages_count
- n:m or m should work if m <= messages_count
*/
- if (arg->value.seqset == NULL || cmd->client->messages_count == 0 ||
- (arg->value.seqset->seq1 > cmd->client->messages_count &&
- arg->value.seqset->seq1 != (uint32_t)-1) ||
- (arg->value.seqset->seq2 > cmd->client->messages_count &&
- arg->value.seqset->seq2 != (uint32_t)-1)) {
+ if (set == NULL || messages_count == 0)
+ return FALSE;
+
+ for (; set != NULL; set = set->next) {
+ if ((set->seq1 > messages_count && set->seq1 != (uint32_t)-1) ||
+ (set->seq2 > messages_count && set->seq2 != (uint32_t)-1))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static int imap_search_get_msgset_arg(struct client_command_context *cmd,
+ const char *messageset,
+ struct mail_search_arg **arg_r,
+ const char **error_r)
+{
+ struct mail_search_arg *arg;
+
+ arg = p_new(cmd->pool, struct mail_search_arg, 1);
+ arg->type = SEARCH_SEQSET;
+ arg->value.seqset = imap_messageset_parse(cmd->pool, messageset);
+ if (!msgset_is_valid(arg->value.seqset, cmd->client->messages_count)) {
*error_r = "Invalid messageset";
return -1;
}
More information about the dovecot-cvs
mailing list