diff options
author | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-11-03 19:25:15 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@tele2.at> | 2018-11-03 19:26:00 +0100 |
commit | b3773d09ea08234a1e0205ecb66733dda067c1ea (patch) | |
tree | f7ead7e62a7f20376cbdb3c7036d1b9e3ecaf04c | |
parent | 24e98f1e5b7dba6af0d2524127098c04530680a2 (diff) |
Only parse arguments if index actually is numeric
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
-rw-r--r-- | lib/libcfg/rdline.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/libcfg/rdline.c b/lib/libcfg/rdline.c index 3c3fcb3..b532def 100644 --- a/lib/libcfg/rdline.c +++ b/lib/libcfg/rdline.c @@ -84,15 +84,16 @@ static int normalize_line(rdline_t *t) } else if (c == '%') { *(dst++) = c; c = *(src++); - if (c != '%' && !isdigit(c)) { + if (isdigit(c)) { + if ((c - '0') >= t->argc) { + errstr = "argument out of range"; + goto fail; + } + ret += strlen(t->argv[c - '0']); + } else if (c != '%') { errstr = "expected digit after '%%'"; goto fail; } - if (isdigit(c) && (c - '0') >= t->argc) { - errstr = "argument out of range"; - goto fail; - } - ret += strlen(t->argv[c - '0']); } else if (string && c == '\\' && *src != '\0') { *(dst++) = c; c = *(src++); |