dovecot-2.2: imap: Fixed crashing in QRESYNC SELECT.
dovecot at dovecot.org
dovecot at dovecot.org
Wed Sep 19 17:49:34 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/119225e4f305
changeset: 15089:119225e4f305
user: Timo Sirainen <tss at iki.fi>
date: Wed Sep 19 17:49:28 2012 +0300
description:
imap: Fixed crashing in QRESYNC SELECT.
diffstat:
src/imap/cmd-fetch.c | 3 ++-
src/imap/cmd-select.c | 4 ++--
src/imap/imap-fetch.c | 18 ------------------
src/imap/imap-fetch.h | 4 ----
src/imap/imap-search-args.c | 15 +++++++++++++++
src/imap/imap-search-args.h | 3 +++
6 files changed, 22 insertions(+), 25 deletions(-)
diffs (116 lines):
diff -r 14df6be0111f -r 119225e4f305 src/imap/cmd-fetch.c
--- a/src/imap/cmd-fetch.c Wed Sep 19 15:34:00 2012 +0300
+++ b/src/imap/cmd-fetch.c Wed Sep 19 17:49:28 2012 +0300
@@ -118,7 +118,8 @@
return FALSE;
}
*args += 1;
- imap_fetch_add_changed_since(ctx, search_args, modseq);
+ imap_search_add_changed_since(search_args, modseq);
+ imap_fetch_init_nofail_handler(ctx, imap_fetch_modseq_init);
return TRUE;
}
if (strcmp(name, "VANISHED") == 0 && cmd->uid) {
diff -r 14df6be0111f -r 119225e4f305 src/imap/cmd-select.c
--- a/src/imap/cmd-select.c Wed Sep 19 15:34:00 2012 +0300
+++ b/src/imap/cmd-select.c Wed Sep 19 17:49:28 2012 +0300
@@ -4,6 +4,7 @@
#include "seq-range-array.h"
#include "imap-commands.h"
#include "mail-search-build.h"
+#include "imap-search-args.h"
#include "imap-seqset.h"
#include "imap-fetch.h"
#include "imap-sync.h"
@@ -239,6 +240,7 @@
search_args->args = p_new(search_args->pool, struct mail_search_arg, 1);
search_args->args->type = SEARCH_UIDSET;
search_args->args->value.seqset = ctx->qresync_known_uids;
+ imap_search_add_changed_since(search_args, ctx->qresync_modseq);
memset(&qresync_args, 0, sizeof(qresync_args));
qresync_args.qresync_sample_seqset = &ctx->qresync_sample_seqset;
@@ -252,8 +254,6 @@
fetch_ctx = imap_fetch_alloc(ctx->cmd->client, ctx->cmd->pool);
- imap_fetch_add_changed_since(fetch_ctx, search_args,
- ctx->qresync_modseq);
imap_fetch_init_nofail_handler(fetch_ctx, imap_fetch_uid_init);
imap_fetch_init_nofail_handler(fetch_ctx, imap_fetch_flags_init);
imap_fetch_init_nofail_handler(fetch_ctx, imap_fetch_modseq_init);
diff -r 14df6be0111f -r 119225e4f305 src/imap/imap-fetch.c
--- a/src/imap/imap-fetch.c Wed Sep 19 15:34:00 2012 +0300
+++ b/src/imap/imap-fetch.c Wed Sep 19 17:49:28 2012 +0300
@@ -129,24 +129,6 @@
return ctx;
}
-void imap_fetch_add_changed_since(struct imap_fetch_context *ctx,
- struct mail_search_args *search_args,
- uint64_t modseq)
-{
- struct mail_search_arg *search_arg;
-
- search_arg = p_new(search_args->pool, struct mail_search_arg, 1);
- search_arg->type = SEARCH_MODSEQ;
- search_arg->value.modseq =
- p_new(search_args->pool, struct mail_search_modseq, 1);
- search_arg->value.modseq->modseq = modseq + 1;
-
- search_arg->next = search_args->args->next;
- search_args->args->next = search_arg;
-
- imap_fetch_init_nofail_handler(ctx, imap_fetch_modseq_init);
-}
-
#undef imap_fetch_add_handler
void imap_fetch_add_handler(struct imap_fetch_init_context *ctx,
enum imap_fetch_handler_flags flags,
diff -r 14df6be0111f -r 119225e4f305 src/imap/imap-fetch.h
--- a/src/imap/imap-fetch.h Wed Sep 19 15:34:00 2012 +0300
+++ b/src/imap/imap-fetch.h Wed Sep 19 17:49:28 2012 +0300
@@ -116,10 +116,6 @@
void imap_fetch_init_nofail_handler(struct imap_fetch_context *ctx,
bool (*init)(struct imap_fetch_init_context *));
-void imap_fetch_add_changed_since(struct imap_fetch_context *ctx,
- struct mail_search_args *search_args,
- uint64_t modseq);
-
void imap_fetch_begin(struct imap_fetch_context *ctx, struct mailbox *box,
struct mail_search_args *search_args);
int imap_fetch_send_vanished(struct client *client, struct mailbox *box,
diff -r 14df6be0111f -r 119225e4f305 src/imap/imap-search-args.c
--- a/src/imap/imap-search-args.c Wed Sep 19 15:34:00 2012 +0300
+++ b/src/imap/imap-search-args.c Wed Sep 19 17:49:28 2012 +0300
@@ -209,3 +209,18 @@
}
return 1;
}
+
+void imap_search_add_changed_since(struct mail_search_args *search_args,
+ uint64_t modseq)
+{
+ struct mail_search_arg *search_arg;
+
+ search_arg = p_new(search_args->pool, struct mail_search_arg, 1);
+ search_arg->type = SEARCH_MODSEQ;
+ search_arg->value.modseq =
+ p_new(search_args->pool, struct mail_search_modseq, 1);
+ search_arg->value.modseq->modseq = modseq + 1;
+
+ search_arg->next = search_args->args->next;
+ search_args->args->next = search_arg;
+}
diff -r 14df6be0111f -r 119225e4f305 src/imap/imap-search-args.h
--- a/src/imap/imap-search-args.h Wed Sep 19 15:34:00 2012 +0300
+++ b/src/imap/imap-search-args.h Wed Sep 19 17:49:28 2012 +0300
@@ -25,4 +25,7 @@
const char *set, bool uid,
struct mail_search_args **search_args_r);
+void imap_search_add_changed_since(struct mail_search_args *search_args,
+ uint64_t modseq);
+
#endif
More information about the dovecot-cvs
mailing list