From: Timo Sirainen Date: Mon, 6 May 2013 17:15:58 +0000 (+0300) Subject: imap: Fixed URLFETCH assert-crashes due to output_cmd_lock not being cleared. X-Git-Tag: 2.2.2~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2dd9b7365c8efb4e205d521c9d66758dbf7300a;p=thirdparty%2Fdovecot%2Fcore.git imap: Fixed URLFETCH assert-crashes due to output_cmd_lock not being cleared. --- diff --git a/src/imap/cmd-urlfetch.c b/src/imap/cmd-urlfetch.c index 86f1d05115..d8c2e7f9df 100644 --- a/src/imap/cmd-urlfetch.c +++ b/src/imap/cmd-urlfetch.c @@ -43,7 +43,14 @@ static void cmd_urlfetch_finish(struct client_command_context *cmd) imap_urlauth_fetch_deinit(&ctx->ufetch); if (ctx->failed) { - client_send_internal_error(cmd); + if (cmd->client->output_cmd_lock == cmd) { + /* failed in the middle of a literal. + we need to disconnect. */ + cmd->client->output_cmd_lock = NULL; + client_disconnect(cmd->client, "URLFETCH failed"); + } else { + client_send_internal_error(cmd); + } return; } @@ -147,12 +154,12 @@ static bool cmd_urlfetch_continue(struct client_command_context *cmd) client_send_line(client, ")"); else client_send_line(client, ""); + client->output_cmd_lock = NULL; if (imap_urlauth_fetch_continue(ctx->ufetch)) { /* waiting for imap urlauth service */ cmd->state = CLIENT_COMMAND_STATE_WAIT_EXTERNAL; cmd->func = cmd_urlfetch_cancel; - client->output_cmd_lock = NULL; /* retrieve next url */ return FALSE;