sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit 31b4b96ebf2af88630752d8518fd360ff84cf3e5
parent 137dbf3e6d567ca98df9bde1e2a0e69d81bd5ced
Author: Manuel Stoeckl <code@mstoeckl.com>
Date:   Tue,  2 Feb 2021 00:20:15 -0500

commands/exec: stop truncating >4095-byte commands

Diffstat:
Msway/commands/exec_always.c | 15++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/sway/commands/exec_always.c b/sway/commands/exec_always.c @@ -26,7 +26,7 @@ struct cmd_results *cmd_exec_validate(int argc, char **argv) { struct cmd_results *cmd_exec_process(int argc, char **argv) { struct cmd_results *error = NULL; - char *tmp = NULL; + char *cmd = NULL; if (strcmp(argv[0], "--no-startup-id") == 0) { sway_log(SWAY_INFO, "exec switch '--no-startup-id' not supported, ignored."); --argc; ++argv; @@ -36,17 +36,12 @@ struct cmd_results *cmd_exec_process(int argc, char **argv) { } if (argc == 1 && (argv[0][0] == '\'' || argv[0][0] == '"')) { - tmp = strdup(argv[0]); - strip_quotes(tmp); + cmd = strdup(argv[0]); + strip_quotes(cmd); } else { - tmp = join_args(argv, argc); + cmd = join_args(argv, argc); } - // Put argument into cmd array - char cmd[4096]; - strncpy(cmd, tmp, sizeof(cmd) - 1); - cmd[sizeof(cmd) - 1] = 0; - free(tmp); sway_log(SWAY_DEBUG, "Executing %s", cmd); int fd[2]; @@ -76,10 +71,12 @@ struct cmd_results *cmd_exec_process(int argc, char **argv) { close(fd[1]); _exit(0); // Close child process } else if (pid < 0) { + free(cmd); close(fd[0]); close(fd[1]); return cmd_results_new(CMD_FAILURE, "fork() failed"); } + free(cmd); close(fd[1]); // close write ssize_t s = 0; while ((size_t)s < sizeof(pid_t)) {