parse: improve detection of bad input string
authorJens Axboe <axboe@kernel.dk>
Mon, 14 Oct 2019 14:03:53 +0000 (08:03 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 14 Oct 2019 14:03:53 +0000 (08:03 -0600)
If we attempt to do number conversion, and strtoll() returns 0 AND
the end pointer is the same as the starting string, then fail the
conversion.

Fixes: https://github.com/axboe/fio/issues/841
Signed-off-by: Jens Axboe <axboe@kernel.dk>
parse.c

diff --git a/parse.c b/parse.c
index c4fd4626df9f581eb100894a8380d1fef61a0ca8..483a62f680cf8ba3dde1982afdb9aea63bcd6d73 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -373,12 +373,16 @@ int str_to_decimal(const char *str, long long *val, int kilo, void *data,
 #endif
 
        if (rc == 1) {
+               char *endptr;
+
                if (strstr(str, "0x") || strstr(str, "0X"))
                        base = 16;
                else
                        base = 10;
 
-               *val = strtoll(str, NULL, base);
+               *val = strtoll(str, &endptr, base);
+               if (*val == 0 && endptr == str)
+                       return 1;
                if (*val == LONG_MAX && errno == ERANGE)
                        return 1;
        }