Mercurial > dovecot > core-2.2
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; }