Mercurial > dovecot > original-hg > dovecot-1.2
diff src/imap/client.c @ 6179:5c6af3b74d5f HEAD
If client disconnects in the middle of sending command parameters, don't
crash with "command didn't cancel itself" error.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 06 Aug 2007 19:45:01 +0300 |
parents | 896cc473c1f0 |
children | da3c8d825f5c |
line wrap: on
line diff
--- a/src/imap/client.c Mon Aug 06 19:29:16 2007 +0300 +++ b/src/imap/client.c Mon Aug 06 19:45:01 2007 +0300 @@ -62,7 +62,7 @@ cmd->cancel = TRUE; cmd_ret = cmd->func == NULL ? TRUE : cmd->func(cmd); - if (!cmd_ret) { + if (!cmd_ret && !cmd->param_error) { if (cmd->client->output->closed) i_panic("command didn't cancel itself: %s", cmd->name); } else { @@ -260,6 +260,10 @@ return TRUE; } else if (ret == -2) { /* need more data */ + if (cmd->client->input->closed) { + /* disconnected */ + cmd->param_error = TRUE; + } return FALSE; } else { /* error, or missing arguments */