From 032f784601219474ac2a31d61caa071665451933 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 10 May 2023 12:10:14 -0700 Subject: make -p buffer overrun fix with outlandish current time * src/main.c (safer_ctime): New function. (print_data_base): Use it. --- src/main.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index fdd4e9d4..d22d170a 100644 --- a/src/main.c +++ b/src/main.c @@ -3720,6 +3720,18 @@ print_version (void) printed_version = 1; } +/* Like ctime, except do not have undefined behavior with timestamps + out of ctime range. */ +static char const * +safer_ctime (time_t *t) +{ + struct tm *tm = localtime (t); + if (tm && -999 - 1900 <= tm->tm_year && tm->tm_year <= 9999 - 1900) + return ctime (t); + else + return "(time out of range)\n"; +} + static time_t time_now (void) { @@ -3758,7 +3770,7 @@ print_data_base (void) print_version (); - printf (_("\n# Make data base, printed on %s"), ctime (&when)); + printf (_("\n# Make data base, printed on %s"), safer_ctime (&when)); print_variable_data_base (); print_dir_data_base (); @@ -3768,7 +3780,7 @@ print_data_base (void) strcache_print_stats ("#"); when = time_now (); - printf (_("\n# Finished Make data base on %s\n"), ctime (&when)); + printf (_("\n# Finished Make data base on %s\n"), safer_ctime (&when)); } static void -- cgit v1.2.1