From: Silent Date: Mon, 13 Jan 2025 14:01:06 +0000 (+0100) Subject: syscall: fix a Y2038 bug by replacing Int32x32To64 with multiplication X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=77be09aaed1f0ae309b6203c55500e41a4c5e395;p=thirdparty%2Frsync.git syscall: fix a Y2038 bug by replacing Int32x32To64 with multiplication Int32x32To64 macro internally truncates the arguments to int32, while time_t is 64-bit on most/all modern platforms. Therefore, usage of this macro creates a Year 2038 bug. --- diff --git a/syscall.c b/syscall.c index 2287e16e..ec0e0708 100644 --- a/syscall.c +++ b/syscall.c @@ -480,7 +480,7 @@ int do_SetFileTime(const char *path, time_t crtime) free(pathw); if (handle == INVALID_HANDLE_VALUE) return -1; - int64 temp_time = Int32x32To64(crtime, 10000000) + 116444736000000000LL; + int64 temp_time = (crtime * 10000000LL) + 116444736000000000LL; FILETIME birth_time; birth_time.dwLowDateTime = (DWORD)temp_time; birth_time.dwHighDateTime = (DWORD)(temp_time >> 32);