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;
 	}