Commit 33254e1c authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarRich Salz <rsalz@openssl.org>
parent 421e30ec
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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);
+10 −6
Original line number Diff line number Diff line
@@ -468,13 +468,17 @@ int x509_main(int argc, char **argv)
            break;
        case OPT_CHECKEND:
            checkend = 1;
            if (!opt_imax(opt_arg(), &checkoffset))
            {
                intmax_t temp = 0;
                if (!opt_imax(opt_arg(), &temp))
                    goto opthelp;
            if (checkoffset != (time_t)checkoffset) {
                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:
            checkhost = opt_arg();