-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix #78241: touch() does not handle dates after 2038 in PHP 64-bit
`time_t` defaults to `_time64` (which is 64bit signed) even on x86, but `Int32x32To64()` truncates it to signed 32bit. We replace the macro with the "manual" calculation.
- Loading branch information
Showing
3 changed files
with
37 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
--TEST-- | ||
Bug #78241 (touch() does not handle dates after 2038 in PHP 64-bit) | ||
--SKIPIF-- | ||
<?php | ||
if (substr(PHP_OS, 0, 3) != 'WIN') die('skip this test is for Windows platforms only'); | ||
if (PHP_INT_SIZE != 8) die('skip this test is for 64bit platforms only'); | ||
?> | ||
--INI-- | ||
date.timezone=UTC | ||
--FILE-- | ||
<?php | ||
$filename = __DIR__ . '/bug78241.txt'; | ||
for ($i = 2037; $i <= 2040; $i++) { | ||
$t = mktime(1, 1 , 1, 1, 1, $i); | ||
echo 'Date: '.date('D, d M Y H:i:s', $t), PHP_EOL; | ||
touch($filename, $t); | ||
clearstatcache(true, $filename); | ||
$file = filemtime($filename); | ||
echo 'File: '.date('D, d M Y H:i:s', $file), PHP_EOL, PHP_EOL; | ||
} | ||
?> | ||
--EXPECT-- | ||
Date: Thu, 01 Jan 2037 01:01:01 | ||
File: Thu, 01 Jan 2037 01:01:01 | ||
|
||
Date: Fri, 01 Jan 2038 01:01:01 | ||
File: Fri, 01 Jan 2038 01:01:01 | ||
|
||
Date: Sat, 01 Jan 2039 01:01:01 | ||
File: Sat, 01 Jan 2039 01:01:01 | ||
|
||
Date: Sun, 01 Jan 2040 01:01:01 | ||
File: Sun, 01 Jan 2040 01:01:01 |