On Tue, Apr 16, 2024 at 10:24:02PM +0200, Andrey Albershteyn wrote: > Convert howlong argument to a time_t as it's truncated to int, but in > practice this is not an issue as duration will never be this big. > > Add check for howlong to fit into int (printf can use int format > specifier). Even longer interval doesn't make much sense. > > Signed-off-by: Andrey Albershteyn <aalbersh@xxxxxxxxxx> > --- > fsr/xfs_fsr.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c > index 3077d8f4ef46..4e29a8a2c548 100644 > --- a/fsr/xfs_fsr.c > +++ b/fsr/xfs_fsr.c > @@ -72,7 +72,7 @@ static int packfile(char *fname, char *tname, int fd, > static void fsrdir(char *dirname); > static int fsrfs(char *mntdir, xfs_ino_t ino, int targetrange); > static void initallfs(char *mtab); > -static void fsrallfs(char *mtab, int howlong, char *leftofffile); > +static void fsrallfs(char *mtab, time_t howlong, char *leftofffile); > static void fsrall_cleanup(int timeout); > static int getnextents(int); > int xfsrtextsize(int fd); > @@ -165,6 +165,10 @@ main(int argc, char **argv) > break; > case 't': > howlong = atoi(optarg); > + if (howlong > INT_MAX) { > + fprintf(stderr, _("%s: too long\n"), progname); Don't just say that it's too long; tell the user what the maximum is. Also perhaps print the argument that was wrong so that the user knows exactly what they got wrong: fprintf(stderr, _("%s: the maximum runtime is %d seconds.\n"), optarg, INT_MAX); $ xfs_fsr -t 123456789123456789 123456789123456789: the maximum runtime is 2147483647 seconds. --D > + exit(1); > + } > break; > case 'f': > leftofffile = optarg; > @@ -387,7 +391,7 @@ initallfs(char *mtab) > } > > static void > -fsrallfs(char *mtab, int howlong, char *leftofffile) > +fsrallfs(char *mtab, time_t howlong, char *leftofffile) > { > int fd; > int error; > -- > 2.42.0 > >