X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=init.c;h=bb53a1e2bc097a256172db7e46075bd5658704da;hb=4eff3e579280ca5a5416ffb7fa106791aa23d6ef;hp=dc563fd212adcc6fb2b561193fb283c33369603f;hpb=aad918e47d119eb2043311f1a2a45ce109c047d1;p=fio.git diff --git a/init.c b/init.c index dc563fd2..bb53a1e2 100644 --- a/init.c +++ b/init.c @@ -1036,8 +1036,14 @@ static char *make_filename(char *buf, size_t buf_size,struct thread_options *o, ret = snprintf(dst, dst_left, "%s", jobname); if (ret < 0) break; - dst += ret; - dst_left -= ret; + else if (ret > dst_left) { + log_err("fio: truncated filename\n"); + dst += dst_left; + dst_left = 0; + } else { + dst += ret; + dst_left -= ret; + } break; } case FPRE_JOBNUM: { @@ -1046,8 +1052,14 @@ static char *make_filename(char *buf, size_t buf_size,struct thread_options *o, ret = snprintf(dst, dst_left, "%d", jobnum); if (ret < 0) break; - dst += ret; - dst_left -= ret; + else if (ret > dst_left) { + log_err("fio: truncated filename\n"); + dst += dst_left; + dst_left = 0; + } else { + dst += ret; + dst_left -= ret; + } break; } case FPRE_FILENUM: { @@ -1056,8 +1068,14 @@ static char *make_filename(char *buf, size_t buf_size,struct thread_options *o, ret = snprintf(dst, dst_left, "%d", filenum); if (ret < 0) break; - dst += ret; - dst_left -= ret; + else if (ret > dst_left) { + log_err("fio: truncated filename\n"); + dst += dst_left; + dst_left = 0; + } else { + dst += ret; + dst_left -= ret; + } break; } default: @@ -2258,12 +2276,18 @@ int parse_cmd_line(int argc, char *argv[], int client_type) break; } case 'W': + if (trigger_file) + free(trigger_file); trigger_file = strdup(optarg); break; case 'H': + if (trigger_cmd) + free(trigger_cmd); trigger_cmd = strdup(optarg); break; case 'J': + if (trigger_remote_cmd) + free(trigger_remote_cmd); trigger_remote_cmd = strdup(optarg); break; case 'B':