From: Kiran Rangoon Date: Mon, 29 Dec 2025 03:50:59 +0000 (-0500) Subject: libuuid: fix timestamp overflow for pre-1970 dates X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6bd5aaa722cf2a29f901ef2fa07d54c09af8bc5;p=thirdparty%2Futil-linux.git libuuid: fix timestamp overflow for pre-1970 dates 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 Reviewed-by: Thomas Weißschuh --- diff --git a/libuuid/src/uuid_time.c b/libuuid/src/uuid_time.c index 2f7c6652c..63179fd76 100644 --- a/libuuid/src/uuid_time.c +++ b/libuuid/src/uuid_time.c @@ -63,7 +63,7 @@ time_t __uuid_time(const uuid_t uu, struct timeval *ret_tv); 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; } diff --git a/tests/expected/uuid/uuidparse b/tests/expected/uuid/uuidparse index 9edb05e4e..e44964b30 100644 --- a/tests/expected/uuid/uuidparse +++ b/tests/expected/uuid/uuidparse @@ -11,7 +11,7 @@ UUID VARIANT TYPE TIME 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