From 2e6a374a4cffc1cbc009c69c8aed2df5a193c2a2 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 6 Aug 2018 12:39:25 +0300 Subject: [PATCH] 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. --- src/imap/imap-client.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index baa468374d..80b24e7877 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -785,7 +785,13 @@ client_command_find_with_flags(struct client_command_context *new_cmd, 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; }