parser: fix overflowing integer type options
authorJens Axboe <axboe@kernel.dk>
Mon, 24 Sep 2012 12:32:26 +0000 (14:32 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 24 Sep 2012 12:32:26 +0000 (14:32 +0200)
If we use bs=4g, the parser will happily take it since it shares
the data type with unsigned long long options. Make sure that
FIO_OPT_INT types have a cap of UINT_MAX, if they haven't set
a lower limit.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
parse.c

diff --git a/parse.c b/parse.c
index c8b7545a27b85ee3649d95798940b5746ae3576b..1a686e4cceb89a5ee8446d10a4472556d3445764 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -430,13 +430,13 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data,
                        break;
 
                if (o->maxval && ull > o->maxval) {
-                       log_err("max value out of range: %lld"
-                                       " (%d max)\n", ull, o->maxval);
+                       log_err("max value out of range: %llu"
+                                       " (%u max)\n", ull, o->maxval);
                        return 1;
                }
                if (o->minval && ull < o->minval) {
-                       log_err("min value out of range: %lld"
-                                       " (%d min)\n", ull, o->minval);
+                       log_err("min value out of range: %llu"
+                                       " (%u min)\n", ull, o->minval);
                        return 1;
                }
 
@@ -1087,6 +1087,10 @@ void option_init(struct fio_option *o)
                o->minval = 0;
                o->maxval = 1;
        }
+       if (o->type == FIO_OPT_INT) {
+               if (!o->maxval)
+                       o->maxval = UINT_MAX;
+       }
        if (o->type == FIO_OPT_FLOAT_LIST) {
                o->minfp = NAN;
                o->maxfp = NAN;