Merge branch 'PHP-8.1' into PHP-8.2

* PHP-8.1:
  Fix GH-10766: PharData archive created with Phar::Zip format does not keep files metadata (datetime)
This commit is contained in:
Niels Dossche 2023-03-04 23:57:03 +01:00
commit d8294f2824
3 changed files with 32 additions and 1 deletions

4
NEWS
View file

@ -12,6 +12,10 @@ PHP NEWS
- Opcache:
. Fixed build for macOS to cater with pkg-config settings. (David Carlier)
- Phar:
. Fixed bug GH-10766 (PharData archive created with Phar::Zip format does
not keep files metadata (datetime)). (nielsdos)
16 Mar 2023, PHP 8.2.4
- Core:

View file

@ -0,0 +1,26 @@
--TEST--
GH-10766 (PharData archive created with Phar::Zip format does not keep files metadata (datetime))
--EXTENSIONS--
phar
zip
--INI--
phar.readonly=0
--FILE--
<?php
$phar = new PharData(__DIR__ . '/gh10766.zip', 0, null, Phar::ZIP);
$phar->addFromString('name', 'contents');
unset($phar);
// Re-read from disk, but using the zip extension because the phar bug will not make it possible
// to use their timestamp methods.
$zip = new ZipArchive();
$zip->open(__DIR__ . '/gh10766.zip');
var_dump($zip->statName('name')['mtime'] > 315529200 /* earliest possible zip timestamp */);
$zip->close();
?>
--CLEAN--
<?php
unlink(__DIR__ . '/gh10766.zip');
?>
--EXPECT--
bool(true)

View file

@ -147,7 +147,8 @@ static void phar_zip_u2d_time(time_t time, char *dtime, char *ddate) /* {{{ */
struct tm *tm, tmbuf;
tm = php_localtime_r(&time, &tmbuf);
if (tm->tm_year >= 1980) {
/* Note: tm_year is the year - 1900 */
if (tm->tm_year >= 80) {
cdate = ((tm->tm_year+1900-1980)<<9) + ((tm->tm_mon+1)<<5) + tm->tm_mday;
ctime = ((tm->tm_hour)<<11) + ((tm->tm_min)<<5) + ((tm->tm_sec)>>1);
} else {