Use int64_t arithmetic to correctly handle timestamps before Unix epoch.
This fixes the overflow that was causing UUID timestamps from 1582 to
appear as far-future dates. Update test expectations accordingly.
Signed-off-by: Kiran Rangoon <kiranrangoon0@gmail.com>
Reviewed-by: Thomas Weißschuh <thomas@t-8ch.de>
static void gregorian_to_unix(uint64_t ts, struct timeval *tv)
{
const uint64_t offset = 0x01B21DD213814000ULL;
- uint64_t clock_reg = ts - offset;
+ int64_t clock_reg = (int64_t)(ts - offset);
tv->tv_sec = clock_reg / 10000000;
tv->tv_usec = (clock_reg % 10000000) / 10;
}
00000000-0000-3000-8000-000000000000 DCE name-based
00000000-0000-4000-8000-000000000000 DCE random
00000000-0000-5000-8000-000000000000 DCE sha1-based
-00000000-0000-6000-8000-000000000000 DCE time-v6 60038-03-11 05:36:10,955161+00:00
+00000000-0000-6000-8000-000000000000 DCE time-v6 1582-10-15 00:00:00,000000+00:00
00000000-0000-0000-d000-000000000000 Microsoft
00000000-0000-1000-d000-000000000000 Microsoft
00000000-0000-2000-d000-000000000000 Microsoft