From 854497b242b78f14f990a04d2c1fed14b03ee33b Mon Sep 17 00:00:00 2001 From: r-c-f Date: Tue, 24 Mar 2020 10:07:12 -0500 Subject: [PATCH] check for workspace command name arg * check for workspace command name arg (fix #5131) For the 'workspace output ' command, output_location must be greater than zero or the attempt to get the workspace name with join_args will segfault or abort() (depending on the flavor of sway_assert() in use). This checks and returns an error instead. * put workspace output error string on one line To ease grepping as requested * check for name in workspace gaps command as well A malformed command here will lead to the same result seen in #5131, so add a check. Done inside the cmd_workspace_gaps() function itself, to take advantage of the existing 'Expected...' string. --- sway/commands/workspace.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sway/commands/workspace.c b/sway/commands/workspace.c index b911b2f61..2858a2840 100644 --- a/sway/commands/workspace.c +++ b/sway/commands/workspace.c @@ -60,6 +60,9 @@ static struct cmd_results *cmd_workspace_gaps(int argc, char **argv, int gaps_location) { const char expected[] = "Expected 'workspace gaps " "inner|outer|horizontal|vertical|top|right|bottom|left '"; + if (gaps_location == 0) { + return cmd_results_new(CMD_INVALID, expected); + } struct cmd_results *error = NULL; if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, gaps_location + 3))) { @@ -140,7 +143,10 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { break; } } - if (output_location >= 0) { + if (output_location == 0) { + return cmd_results_new(CMD_INVALID, + "Expected 'workspace output '"); + } else if (output_location > 0) { if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, output_location + 2))) { return error;