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