diff options
Diffstat (limited to 'src/parser.c')
| -rw-r--r-- | src/parser.c | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/src/parser.c b/src/parser.c index 6b3185a..d6d35c2 100644 --- a/src/parser.c +++ b/src/parser.c @@ -378,38 +378,31 @@ found: } } else if (!strcmp(key, "exec")) { - char *comment = strchr(rest, '#'); - size_t len = comment ? (size_t)(comment - rest) : strlen(rest); - char win[len + 1]; - strncpy(win, rest, len); - win[len] = '\0'; - - char *final = strip(win); - char *cmd = strip(final); - if (*cmd == '"') { - cmd++; - } - else { - fprintf(stderr, "sxwmrc:%d: exec not enclosed in quotes", lineno); + if (torun >= 256) { + fprintf(stderr, "sxwmrc:%d: too many exec commands\n", lineno); + continue; } - char *end = cmd + strlen(cmd) - 1; - if (*end == '"') { - *end = '\0'; - } - else { - fprintf(stderr, "sxwmrc:%d: exec not enclosed in quotes", lineno); + char *comment = strchr(rest, '#'); + if (comment) { + *comment = '\0'; } - printf("DEBUG: exec command '%s'\n", cmd); - cfg->torun[torun] = strdup(cmd); + char *cmd = strip(rest); + cmd = strip_quotes(cmd); - if (torun > 254) { - fprintf(stderr, "sxwmrc:%d: too many execs", lineno); + if (!*cmd) { + fprintf(stderr, "sxwmrc:%d: empty exec command\n", lineno); + continue; } - else { - torun++; + + cfg->torun[torun] = strdup(cmd); + if (!cfg->torun[torun]) { + fprintf(stderr, "sxwmrc:%d: failed to allocate memory for exec command\n", lineno); + continue; } + + torun++; } else { fprintf(stderr, "sxwmrc:%d: unknown option '%s'\n", lineno, key); |
