parse: fix crash with empty FIO_OPT_STR_STORE variables
authorJens Axboe <axboe@fb.com>
Thu, 3 Apr 2014 14:18:07 +0000 (08:18 -0600)
committerJens Axboe <axboe@fb.com>
Thu, 3 Apr 2014 14:18:07 +0000 (08:18 -0600)
Sébastien reports:

A crash on solaris & windows (at least) when using fio-2.1.6.1 :

A simple profile that use a env variable : directory=${DIRECTORY}

I'm starting fio without defining DIRECTORY and I'm getting a crash:

The stack on solaris is :

core 'core' of 4574:    ./fio ../fio_env.win
 0000000100035348 set_name_idx (ffffffff7fffe970100231950, 0, 16c4e8, 0, 1002319b0) + cc
 0000000100021a70 add_file (ffffffff7b400000ffffffff7fffee60, 0, 0, 100071c30ffffffff7fffe970) + 38
 000000010000daf4 add_job.part.4 (7, 100236050, 0, ffffffff7ffff268, 1, 0) + 11f0
 000000010000f444 parse_jobs_ini (0, 0, 0, 1, 1002360501002276c0) + 77c
 0000000100010db0 parse_options (5118, ffffffff7ffff968, 1, 0, 0, 10021eef0) + 304
 000000010006ff68 main (2, ffffffff7ffff968ffffffff7ffff980100228338100000000, 2800) + 20
 000000010000952c _start (0, 0, 0, 0, 0, 0) + 7c

Same thing happens with filename and other store options. Fix this
by checking in the parser whether the string is empty or not.

Reported-by: Sébastien Bouchex Bellomié <sbouchex@infovista.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
parse.c

diff --git a/parse.c b/parse.c
index 079f19e3d32754f53ebfb3d9ca0ff5a8c707fc15..83c59f7026ca7e06b5371d59adfb2b0bd2d39b35 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -608,6 +608,9 @@ static int __handle_option(struct fio_option *o, const char *ptr, void *data,
        case FIO_OPT_STR_STORE: {
                fio_opt_str_fn *fn = o->cb;
 
+               if (!strlen(ptr))
+                       return 1;
+
                if (o->off1) {
                        cp = td_var(data, o, o->off1);
                        *cp = strdup(ptr);