# HG changeset patch # User Maxim Dounin # Date 1505307199 -10800 # Node ID cdbcb73239eed21415f5e190b76d95ef938d4de9 # Parent 644d0457782a215ad2c438182ace17ef6759e4bf Introduced time truncation to December 31, 9999 (ticket #1368). Various buffers are allocated in an assumption that there would be no more than 4 year digits. This might not be true on platforms with 64-bit time_t, as 64-bit time_t is able to represent more than that. Such dates with more than 4 year digits hardly make sense though, as various date formats in use do not allow them anyway. As such, all dates are now truncated by ngx_gmtime() to December 31, 9999. This should have no effect on valid dates, though will prevent potential buffer overflows on invalid ones. diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c --- a/src/core/ngx_times.c +++ b/src/core/ngx_times.c @@ -311,6 +311,16 @@ ngx_gmtime(time_t t, ngx_tm_t *tp) days = t / 86400; sec = t % 86400; + /* + * no more than 4 year digits supported, + * truncate to December 31, 9999, 23:59:59 + */ + + if (days > 2932896) { + days = 2932896; + sec = 86399; + } + /* January 1, 1970 was Thursday */ wday = (4 + days) % 7;