dovecot-1.1: If the SEARCH TEXT/BODY command contained more para...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Mar 8 04:04:23 EET 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/f435be3e3def
changeset: 7377:f435be3e3def
user: Timo Sirainen <tss at iki.fi>
date: Sat Mar 08 04:04:20 2008 +0200
description:
If the SEARCH TEXT/BODY command contained more parameters, we could have
returned too many/little replies.
diffstat:
1 file changed, 17 insertions(+), 11 deletions(-)
src/plugins/fts/fts-storage.c | 28 +++++++++++++++++-----------
diffs (60 lines):
diff -r 1307a1702e5e -r f435be3e3def src/plugins/fts/fts-storage.c
--- a/src/plugins/fts/fts-storage.c Sat Mar 08 04:03:45 2008 +0200
+++ b/src/plugins/fts/fts-storage.c Sat Mar 08 04:04:20 2008 +0200
@@ -423,18 +423,19 @@ static int fts_mailbox_search_next_updat
if (!fctx->seqs_set)
return fbox->module_ctx.super.search_next_update_seq(ctx);
+ wanted_seq = ctx->seq + 1;
/* fts_search_lookup() was called successfully */
- do {
+ for (;;) {
def_range = array_get_modifiable(&fctx->definite_seqs,
&def_count);
maybe_range = array_get_modifiable(&fctx->maybe_seqs,
&maybe_count);
/* if we're ahead of current positions, skip them */
while (fctx->definite_idx < def_count &&
- ctx->seq > def_range[fctx->definite_idx].seq2)
+ wanted_seq > def_range[fctx->definite_idx].seq2)
fctx->definite_idx++;
while (fctx->maybe_idx < maybe_count &&
- ctx->seq > maybe_range[fctx->maybe_idx].seq2)
+ wanted_seq > maybe_range[fctx->maybe_idx].seq2)
fctx->maybe_idx++;
/* use whichever is lower of definite/maybe */
@@ -457,20 +458,25 @@ static int fts_mailbox_search_next_updat
range = def_range + fctx->definite_idx;
i_assert(range->seq1 <= range->seq2);
- if (ctx->seq > range->seq1) {
+ if (wanted_seq > range->seq1) {
/* current sequence is already larger than where
range begins, so use the current sequence. */
- range->seq1 = ctx->seq+1;
+ range->seq1 = wanted_seq+1;
} else {
- ctx->seq = range->seq1 - 1;
- if (++range->seq1 > range->seq2)
- range->seq2 = 0;
- }
+ wanted_seq = range->seq1;
+ range->seq1++;
+ }
+ if (range->seq1 > range->seq2)
+ range->seq2 = 0;
/* ctx->seq points to previous sequence we want */
- wanted_seq = ctx->seq + 1;
+ ctx->seq = wanted_seq - 1;
ret = fbox->module_ctx.super.search_next_update_seq(ctx);
- } while (ret > 0 && wanted_seq != ctx->seq);
+ if (ret <= 0 || wanted_seq == ctx->seq)
+ break;
+ wanted_seq = ctx->seq;
+ mail_search_args_reset(ctx->args, FALSE);
+ }
if (!use_maybe) {
/* we have definite results, update args */
More information about the dovecot-cvs
mailing list