aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2017-04-12 17:39:01 +0200
committerMarc André Tanner <mat@brain-dump.org>2017-04-12 18:36:26 +0200
commit08ca4d22e08491130bd6be4baad4503f972f7750 (patch)
tree22ffe3407153e94641806c85850d7287fce83ce4
parente5e372ce62f36589ee6b6bc7cb8fd07dfcfb3696 (diff)
downloadvis-08ca4d22e08491130bd6be4baad4503f972f7750.tar.gz
vis-08ca4d22e08491130bd6be4baad4503f972f7750.tar.xz
sam: reject command names containing digits or ending with a hyphen
The current implementation will also reject consecutive hyphens.
-rw-r--r--sam.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sam.c b/sam.c
index fbfb0d1..e2e1667 100644
--- a/sam.c
+++ b/sam.c
@@ -605,12 +605,17 @@ static void parse_argv(const char **s, const char *argv[], size_t maxarg) {
}
}
+static bool valid_cmdname(const char *s) {
+ unsigned char c = (unsigned char)*s;
+ return c && !isspace(c) && !isdigit(c) && (!ispunct(c) || (c == '-' && valid_cmdname(s+1)));
+}
+
static char *parse_cmdname(const char **s) {
Buffer buf;
buffer_init(&buf);
skip_spaces(s);
- while (**s && !isspace((unsigned char)**s) && (!ispunct((unsigned char)**s) || **s == '-'))
+ while (valid_cmdname(*s))
buffer_append(&buf, (*s)++, 1);
buffer_terminate(&buf);