Fix opt_imax() call

Not all architectures have a time_t defined the same way.  To make
sure we get the same result, we need to cast &checkoffset to (intmax_t *)
and make sure that intmax_t is defined somehow.

To make really sure we don't pass a variable with the wrong size down
to opt_imax(), we use a temporary intmax_t.

Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
Richard Levitte 2016-01-30 15:39:34 +01:00
parent 421e30ec67
commit 33254e1c6f
2 changed files with 12 additions and 6 deletions

View File

@ -145,6 +145,8 @@ int opt_umax(const char *value, uintmax_t *result);
# else
# define opt_imax opt_long
# define opt_umax opt_ulong
# define intmax_t long
# define uintmax_t unsigned long
# endif
int app_RAND_load_file(const char *file, int dont_warn);

View File

@ -468,12 +468,16 @@ int x509_main(int argc, char **argv)
break;
case OPT_CHECKEND:
checkend = 1;
if (!opt_imax(opt_arg(), &checkoffset))
goto opthelp;
if (checkoffset != (time_t)checkoffset) {
BIO_printf(bio_err, "%s: checkend time out of range %s\n",
prog, opt_arg());
goto opthelp;
{
intmax_t temp = 0;
if (!opt_imax(opt_arg(), &temp))
goto opthelp;
checkoffset = (time_t)temp;
if ((intmax_t)checkoffset != temp) {
BIO_printf(bio_err, "%s: checkend time out of range %s\n",
prog, opt_arg());
goto opthelp;
}
}
break;
case OPT_CHECKHOST: