From 41f9cdadc422eecacf22f3dca4488a56fd3ff5b2 Mon Sep 17 00:00:00 2001 From: Johan de Vries Date: Thu, 21 Jun 2018 09:29:36 +0200 Subject: [PATCH] src/Mayaqua/Kernel.c: Fix for times before 1970 Before, it would end up far in the future. Now it gets clamped to 1970. This should be fine since dates before 1970 are not actively used. If they are, then the UINT64 should be replaced by the time64t in quite a few places. --- src/Mayaqua/Kernel.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Mayaqua/Kernel.c b/src/Mayaqua/Kernel.c index cb59c3fd..771a6e13 100644 --- a/src/Mayaqua/Kernel.c +++ b/src/Mayaqua/Kernel.c @@ -2137,6 +2137,15 @@ UINT64 SystemToUINT64(SYSTEMTIME *st) } time = SystemToTime(st); + + //For times before 1970-01-01, clamp to the minimum + //because we have to return an unsigned integer. + //This is less wrong than casting it to UINT64 + //and returning a time far in the future. + //For some reason we subtract 9 hours below, so + //account for that here. + if( time < 32400000LL ) return 0; + sec64 = (UINT64)time * (UINT64)1000; sec64 += st->wMilliseconds;