From: Timo Sirainen Date: Thu, 5 Jul 2018 10:40:43 +0000 (+0300) Subject: lib-master: ipc-client: Don't call callback twice if IPC proxy sends invalid input X-Git-Tag: 2.3.9~1590 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=216f1645db08601fc98ac45acc71c75cba35d6f1;p=thirdparty%2Fdovecot%2Fcore.git lib-master: ipc-client: Don't call callback twice if IPC proxy sends invalid input ipc_client_disconnect() called it once, and the second time was done with the cmds[0] that was already removed from the array. --- diff --git a/src/lib-master/ipc-client.c b/src/lib-master/ipc-client.c index 279b82ce7b..cbb9eb6327 100644 --- a/src/lib-master/ipc-client.c +++ b/src/lib-master/ipc-client.c @@ -36,6 +36,7 @@ static void ipc_client_input_line(struct ipc_client *client, const char *line) const struct ipc_client_cmd *cmds; unsigned int count; enum ipc_client_cmd_state state; + bool disconnect = FALSE; cmds = array_get(&client->cmds, &count); if (count == 0) { @@ -56,7 +57,7 @@ static void ipc_client_input_line(struct ipc_client *client, const char *line) default: i_error("IPC proxy sent invalid input: %s", line); line = "Invalid input"; - ipc_client_disconnect(client); + disconnect = TRUE; state = IPC_CLIENT_CMD_STATE_ERROR; break; } @@ -64,6 +65,8 @@ static void ipc_client_input_line(struct ipc_client *client, const char *line) cmds[0].callback(state, line, cmds[0].context); if (state != IPC_CLIENT_CMD_STATE_REPLY) array_delete(&client->cmds, 0, 1); + if (disconnect) + ipc_client_disconnect(client); } static void ipc_client_input(struct ipc_client *client)