From dd6922818631d0bea31d6bb28564ebbb4dc73d60 Mon Sep 17 00:00:00 2001 From: Silent Date: Fri, 3 Jan 2025 10:47:02 +0100 Subject: [PATCH] Fix a Y2038 bug by replacing Int32x32To64 with regular 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. --- libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c | 2 +- libsql-ffi/bundled/SQLite3MultipleCiphers/src/shell.c | 2 +- libsql-sqlite3/ext/misc/fileio.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c index 70546adfca..2c2a8fcbd6 100644 --- a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c +++ b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/fileio.c @@ -428,7 +428,7 @@ static int writeFile( GetSystemTime(¤tTime); SystemTimeToFileTime(¤tTime, &lastAccess); - intervals = Int32x32To64(mtime, 10000000) + 116444736000000000; + intervals = (mtime * 10000000LL) + 116444736000000000LL; lastWrite.dwLowDateTime = (DWORD)intervals; lastWrite.dwHighDateTime = intervals >> 32; zUnicodeName = sqlite3_win32_utf8_to_unicode(zFile); diff --git a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/shell.c b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/shell.c index dea16bdbd4..0a54aeebb5 100644 --- a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/shell.c +++ b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/shell.c @@ -7514,7 +7514,7 @@ static int writeFile( GetSystemTime(¤tTime); SystemTimeToFileTime(¤tTime, &lastAccess); - intervals = Int32x32To64(mtime, 10000000) + 116444736000000000; + intervals = (mtime * 10000000LL) + 116444736000000000LL; lastWrite.dwLowDateTime = (DWORD)intervals; lastWrite.dwHighDateTime = intervals >> 32; zUnicodeName = sqlite3_win32_utf8_to_unicode(zFile); diff --git a/libsql-sqlite3/ext/misc/fileio.c b/libsql-sqlite3/ext/misc/fileio.c index 70546adfca..2c2a8fcbd6 100644 --- a/libsql-sqlite3/ext/misc/fileio.c +++ b/libsql-sqlite3/ext/misc/fileio.c @@ -428,7 +428,7 @@ static int writeFile( GetSystemTime(¤tTime); SystemTimeToFileTime(¤tTime, &lastAccess); - intervals = Int32x32To64(mtime, 10000000) + 116444736000000000; + intervals = (mtime * 10000000LL) + 116444736000000000LL; lastWrite.dwLowDateTime = (DWORD)intervals; lastWrite.dwHighDateTime = intervals >> 32; zUnicodeName = sqlite3_win32_utf8_to_unicode(zFile);