diff options
author | r-c-f <ryan.farley@gmx.com> | 2020-03-24 10:07:12 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-24 16:07:12 +0100 |
commit | 854497b242b78f14f990a04d2c1fed14b03ee33b (patch) | |
tree | 10916925fdae84fc9ceb95c8b4f117d8ab83cc59 /sway/commands/workspace.c | |
parent | Fix redundant call to seat_send_focus() (diff) | |
download | sway-854497b242b78f14f990a04d2c1fed14b03ee33b.tar.gz sway-854497b242b78f14f990a04d2c1fed14b03ee33b.tar.zst sway-854497b242b78f14f990a04d2c1fed14b03ee33b.zip |
check for workspace command name arg
* check for workspace command name arg (fix #5131)
For the 'workspace <name> output <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.
Diffstat (limited to 'sway/commands/workspace.c')
-rw-r--r-- | sway/commands/workspace.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sway/commands/workspace.c b/sway/commands/workspace.c index b911b2f6..2858a284 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, | |||
60 | int gaps_location) { | 60 | int gaps_location) { |
61 | const char expected[] = "Expected 'workspace <name> gaps " | 61 | const char expected[] = "Expected 'workspace <name> gaps " |
62 | "inner|outer|horizontal|vertical|top|right|bottom|left <px>'"; | 62 | "inner|outer|horizontal|vertical|top|right|bottom|left <px>'"; |
63 | if (gaps_location == 0) { | ||
64 | return cmd_results_new(CMD_INVALID, expected); | ||
65 | } | ||
63 | struct cmd_results *error = NULL; | 66 | struct cmd_results *error = NULL; |
64 | if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, | 67 | if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, |
65 | gaps_location + 3))) { | 68 | gaps_location + 3))) { |
@@ -140,7 +143,10 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { | |||
140 | break; | 143 | break; |
141 | } | 144 | } |
142 | } | 145 | } |
143 | if (output_location >= 0) { | 146 | if (output_location == 0) { |
147 | return cmd_results_new(CMD_INVALID, | ||
148 | "Expected 'workspace <name> output <output>'"); | ||
149 | } else if (output_location > 0) { | ||
144 | if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, | 150 | if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, |
145 | output_location + 2))) { | 151 | output_location + 2))) { |
146 | return error; | 152 | return error; |