Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7225:0fe19a3d82a3 HEAD
Only the first value in a messageset was verified to be valid, the rest were
ignored (e.g. 1,100000 passed).
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 11 Feb 2008 19:58:43 +0200 |
parents | d5116fa2c88f |
children | e6693a0ec8e1 |
files | src/imap/imap-search.c |
diffstat | 1 files changed, 21 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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,6 +551,26 @@ return first_sarg; } +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 (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, @@ -561,17 +581,7 @@ arg = p_new(cmd->pool, struct mail_search_arg, 1); arg->type = SEARCH_SEQSET; arg->value.seqset = imap_messageset_parse(cmd->pool, messageset); - /* 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 (!msgset_is_valid(arg->value.seqset, cmd->client->messages_count)) { *error_r = "Invalid messageset"; return -1; }