Skip to content
Permalink
Browse files
Add configure-time detection for SSH_TIME_T_MAX.
Should fix printing cert times exceeding INT_MAX (bz#3329) on platforms
were time_t is a long long.  The limit used is for the signed type, so if
some system has a 32bit unsigned time_t then the lower limit will still
be imposed and we would need to add some way to detect this.  Anyone using
an unsigned 64bit can let us know when it starts being a problem.
  • Loading branch information
daztucker committed Jul 12, 2021
1 parent fd2d06a commit f5fc6a4
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
@@ -3664,14 +3664,24 @@ if test ! -z "$SONY" ; then
LIBS="$LIBS -liberty";
fi

# Check for long long datatypes
# Check for long long datatypes
AC_CHECK_TYPES([long long, unsigned long long, long double])

# Check datatype sizes
AC_CHECK_SIZEOF([short int])
AC_CHECK_SIZEOF([int])
AC_CHECK_SIZEOF([long int])
AC_CHECK_SIZEOF([long long int])
AC_CHECK_SIZEOF([time_t], [], [[
#include <sys/types.h>
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#ifdef HAVE_TIME_H
# include <time.h>
#endif
]]
)

# Sanity check long long for some platforms (AIX)
if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
@@ -304,6 +304,12 @@ typedef long long intmax_t;
typedef unsigned long long uintmax_t;
#endif

#if SIZEOF_TIME_T == SIZEOF_LONG_LONG_INT
# define SSH_TIME_T_MAX LLONG_MAX
#else
# define SSH_TIME_T_MAX INT_MAX
#endif

#ifndef HAVE_U_CHAR
typedef unsigned char u_char;
# define HAVE_U_CHAR
2 misc.c
@@ -2384,7 +2384,7 @@ parse_absolute_time(const char *s, uint64_t *tp)
}

/* On OpenBSD time_t is int64_t which is long long. */
#define SSH_TIME_T_MAX LLONG_MAX
/* #define SSH_TIME_T_MAX LLONG_MAX */

void
format_absolute_time(uint64_t t, char *buf, size_t len)

0 comments on commit f5fc6a4

Please sign in to comment.