Memory leaks, from Gang Fan in GitHub issue 1453.

This commit is contained in:
nicm 2018-08-27 11:03:34 +00:00
parent 1b4402c823
commit 79d2351ce8
4 changed files with 17 additions and 5 deletions

View File

@ -120,8 +120,13 @@ cmd_if_shell_exec(struct cmd *self, struct cmdq_item *item)
cdata->item = NULL; cdata->item = NULL;
memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse); memcpy(&cdata->mouse, &shared->mouse, sizeof cdata->mouse);
job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL, if (job_run(shellcmd, s, server_client_get_cwd(item->client, s), NULL,
cmd_if_shell_callback, cmd_if_shell_free, cdata, 0); cmd_if_shell_callback, cmd_if_shell_free, cdata, 0) == NULL) {
cmdq_error(item, "failed to run command: %s", shellcmd);
free(shellcmd);
free(cdata);
return (CMD_RETURN_ERROR);
}
free(shellcmd); free(shellcmd);
if (args_has(args, 'b')) if (args_has(args, 'b'))

View File

@ -87,6 +87,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item)
if (error != 0) { if (error != 0) {
cmdq_error(item, "-: %s", cause); cmdq_error(item, "-: %s", cause);
free(cause); free(cause);
free(cdata);
return (CMD_RETURN_ERROR); return (CMD_RETURN_ERROR);
} }
return (CMD_RETURN_WAIT); return (CMD_RETURN_WAIT);

View File

@ -102,8 +102,12 @@ cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item)
if (!args_has(args, 'b')) if (!args_has(args, 'b'))
cdata->item = item; cdata->item = item;
job_run(cdata->cmd, s, server_client_get_cwd(item->client, s), NULL, if (job_run(cdata->cmd, s, server_client_get_cwd(item->client, s), NULL,
cmd_run_shell_callback, cmd_run_shell_free, cdata, 0); cmd_run_shell_callback, cmd_run_shell_free, cdata, 0) == NULL) {
cmdq_error(item, "failed to run command: %s", cdata->cmd);
free(cdata);
return (CMD_RETURN_ERROR);
}
if (args_has(args, 'b')) if (args_has(args, 'b'))
return (CMD_RETURN_NORMAL); return (CMD_RETURN_NORMAL);

View File

@ -1086,8 +1086,10 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
found = xstrdup(""); found = xstrdup("");
} }
} }
if (format_choose(ptr + 1, &left, &right) != 0) if (format_choose(ptr + 1, &left, &right) != 0) {
free(found);
goto fail; goto fail;
}
if (format_true(found)) if (format_true(found))
value = format_expand(ft, left); value = format_expand(ft, left);