]> git.kaiwu.me - nginx.git/commitdiff
Introduced time truncation to December 31, 9999 (ticket #1368).
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 13 Sep 2017 12:53:19 +0000 (15:53 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 13 Sep 2017 12:53:19 +0000 (15:53 +0300)
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.

src/core/ngx_times.c

index ef63f1e3d199e86527a6aa878e9614e5ea416fe6..b2edf1a5f972e775880175d3880f8f37f255cddb 100644 (file)
@@ -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;