From: Timo Sirainen Date: Mon, 6 Aug 2018 09:39:25 +0000 (+0300) Subject: imap: Fix command ambiguity checking with special plugins X-Git-Tag: 2.3.4~152 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06cb4a068b1a6732a3bd21cdfd335fb7433c6ddc;p=thirdparty%2Fdovecot%2Fcore.git 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. --- 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; }