[PATCH v5 3/4] libuuid: fix timestamp overflow for pre-1970 dates
Kiran Rangoon <[email protected]> Sun, 28 Dec 2025 22:50:59 -0500
| Newsgroups | org.kernel.vger.util-linux |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> --- libuuid/src/uuid_time.c | 2 +- tests/expected/uuid/uuidparse | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 -- 2.47.3