changeset 22984:d62b238d7d66

imap: Fix command ambiguity checking with special plugins If the tagged line is already sent, that command can't result in ambiguity anymore. A cleaner fix would be to add a new _WAIT_SYNC_OUTPUT state, but that requires all the existing code to understand that new state correctly, so it has a higher chance of breaking something. So at least for now don't add it.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 06 Aug 2018 12:39:25 +0300
parents f2f813d047c8
children e4a91ec695bb
files src/imap/imap-client.c
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-client.c	Tue Dec 12 01:02:27 2017 +0200
+++ b/src/imap/imap-client.c	Mon Aug 06 12:39:25 2018 +0300
@@ -772,7 +772,13 @@
 
 	cmd = new_cmd->client->command_queue;
 	for (; cmd != NULL; cmd = cmd->next) {
-		if (cmd->state <= max_state &&
+		/* The tagline_sent check is a bit kludgy here. Plugins may
+		   hook into sync_notify_more() and send the tagline before
+		   finishing the command. During this stage the state was been
+		   dropped from _WAIT_SYNC to _WAIT_OUTPUT, so the <= max_state
+		   check doesn't work correctly here. (Perhaps we should add
+		   a new _WAIT_SYNC_OUTPUT?) */
+		if (cmd->state <= max_state && !cmd->tagline_sent &&
 		    cmd != new_cmd && (cmd->cmd_flags & flags) != 0)
 			return cmd;
 	}