diff options
author | Peter Mamonov <pmamonov@gmail.com> | 2018-01-15 14:32:33 +0300 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2018-01-17 09:15:11 +0100 |
commit | 6a91cea016ba0ede7c6c22ee644291e19da05785 (patch) | |
tree | 4aba4d7db0b99ed1bdd03eee7632255928d3bd7b /lib | |
parent | 5edc75f7a4961fd900796a52151d5a330c241fa2 (diff) | |
download | barebox-6a91cea016ba0ede7c6c22ee644291e19da05785.tar.gz barebox-6a91cea016ba0ede7c6c22ee644291e19da05785.tar.xz |
lib: parse_area_spec: no extra symbols after area spec are allowed except for spaces
Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/misc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/misc.c b/lib/misc.c index 31c44a3f64..1d20e1b092 100644 --- a/lib/misc.c +++ b/lib/misc.c @@ -79,7 +79,7 @@ EXPORT_SYMBOL(strtoul_suffix); int parse_area_spec(const char *str, loff_t *start, loff_t *size) { char *endp; - loff_t end, _start; + loff_t end, _start, _size; if (!isdigit(*str)) return -1; @@ -90,7 +90,7 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size) if (!*str) { /* beginning given, but no size, assume maximum size */ - *size = ~0; + _size = ~0; goto success; } @@ -99,12 +99,13 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size) if (!isdigit(*(str + 1))) return -1; - end = strtoull_suffix(str + 1, NULL, 0); + end = strtoull_suffix(str + 1, &endp, 0); + str = endp; if (end < _start) { printf("end < start\n"); return -1; } - *size = end - _start + 1; + _size = end - _start + 1; goto success; } @@ -113,14 +114,18 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size) if (!isdigit(*(str + 1))) return -1; - *size = strtoull_suffix(str + 1, NULL, 0); + _size = strtoull_suffix(str + 1, &endp, 0); + str = endp; goto success; } return -1; success: + if (*str && !isspace(*str)) + return -1; *start = _start; + *size = _size; return 0; } EXPORT_SYMBOL(parse_area_spec); |