diff options
author | Konstantin Pospelov <kupospelov@gmail.com> | 2020-08-23 13:59:22 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-08-24 09:41:54 +0200 |
commit | fd216b3a81129f15036755bc6f383c7c261291a5 (patch) | |
tree | a45ac5163ffa90fca8a3a03ef0b563f9829e4345 /sway/commands/exec_always.c | |
parent | Handle SIGINT (diff) | |
download | sway-fd216b3a81129f15036755bc6f383c7c261291a5.tar.gz sway-fd216b3a81129f15036755bc6f383c7c261291a5.tar.zst sway-fd216b3a81129f15036755bc6f383c7c261291a5.zip |
exec: fix validation during config reload
Split cmd_exec_always into separate methods for general validation and
process creation. This fixes a potential call of join_args with 0 arguments.
Diffstat (limited to 'sway/commands/exec_always.c')
-rw-r--r-- | sway/commands/exec_always.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/sway/commands/exec_always.c b/sway/commands/exec_always.c index a5724295..39e48a44 100644 --- a/sway/commands/exec_always.c +++ b/sway/commands/exec_always.c | |||
@@ -13,15 +13,19 @@ | |||
13 | #include "log.h" | 13 | #include "log.h" |
14 | #include "stringop.h" | 14 | #include "stringop.h" |
15 | 15 | ||
16 | struct cmd_results *cmd_exec_always(int argc, char **argv) { | 16 | struct cmd_results *cmd_exec_validate(int argc, char **argv) { |
17 | struct cmd_results *error = NULL; | 17 | struct cmd_results *error = NULL; |
18 | if (!config->active || config->validating) { | ||
19 | return cmd_results_new(CMD_DEFER, NULL); | ||
20 | } | ||
21 | if ((error = checkarg(argc, argv[-1], EXPECTED_AT_LEAST, 1))) { | 18 | if ((error = checkarg(argc, argv[-1], EXPECTED_AT_LEAST, 1))) { |
22 | return error; | 19 | return error; |
23 | } | 20 | } |
21 | if (!config->active || config->validating) { | ||
22 | return cmd_results_new(CMD_DEFER, NULL); | ||
23 | } | ||
24 | return error; | ||
25 | } | ||
24 | 26 | ||
27 | struct cmd_results *cmd_exec_process(int argc, char **argv) { | ||
28 | struct cmd_results *error = NULL; | ||
25 | char *tmp = NULL; | 29 | char *tmp = NULL; |
26 | if (strcmp(argv[0], "--no-startup-id") == 0) { | 30 | if (strcmp(argv[0], "--no-startup-id") == 0) { |
27 | sway_log(SWAY_INFO, "exec switch '--no-startup-id' not supported, ignored."); | 31 | sway_log(SWAY_INFO, "exec switch '--no-startup-id' not supported, ignored."); |
@@ -92,3 +96,11 @@ struct cmd_results *cmd_exec_always(int argc, char **argv) { | |||
92 | 96 | ||
93 | return cmd_results_new(CMD_SUCCESS, NULL); | 97 | return cmd_results_new(CMD_SUCCESS, NULL); |
94 | } | 98 | } |
99 | |||
100 | struct cmd_results *cmd_exec_always(int argc, char **argv) { | ||
101 | struct cmd_results *error; | ||
102 | if ((error = cmd_exec_validate(argc, argv))) { | ||
103 | return error; | ||
104 | } | ||
105 | return cmd_exec_process(argc, argv); | ||
106 | } | ||