Bug #79296 [Com]: ZipArchive::open with ZipArchive::CREATE flag fail when in the Mac OS TMPDIR
| From: | dv dot sum0 at gmail dot com | Date: | Tue, 10 Mar 2020 15:20:59 +0000 |
| Subject: | Bug #79296 [Com]: ZipArchive::open with ZipArchive::CREATE flag fail when in the Mac OS TMPDIR | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-226008@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79296&edit=1
ID: 79296
Comment by: dv dot sum0 at gmail dot com
Reported by: dunglas at gmail dot com
Summary: ZipArchive::open with ZipArchive::CREATE flag fail
when in the Mac OS TMPDIR
Status: Open
Type: Bug
Package: Zip Related
Operating System: Mac OS X
PHP Version: 7.4.3
Block user comment: N
Private report: N
New Comment:
We saw the same issue on a Centos 7 machine, changed between 7.4.2 and 7.4.3
It seems to be caused by the fact that the tempnam() function creates an empty file immediately, if
you use a different filename that doesn't already exist it works as expected.
Previous Comments:
------------------------------------------------------------------------
[2020-02-22 11:10:57] dunglas at gmail dot com
Description:
------------
Creating a Zip archive in the default temporary directory of Mac OS doesn't work with Mac OS
Catalina.
Using the default TMPDIR to store temporary Zip archive, is a common practice. For instance
it's what PHP WebDriver does by default to create a temporary Firefox profile.
Using the OVERWRITE flag of libzip instead of the CREATE one fixes the problem.
This may be due do to the new security features introduced in Mac OS Catalina.
Tested with PHP 7.4 and 8.0-dev, but this bug probably affects all versions.
Test script:
---------------
<?php
$f = tempnam(sys_get_temp_dir(), 'WebDriverFirefoxProfileZip');
$zip = new ZipArchive();
$success = $zip->open($f, ZipArchive::CREATE);
// this work
// $success = $zip->open($f, ZipArchive::OVERWRITE);
if ($success !== true) {
die('Error code '.$success);
}
$zip->addFile(__DIR__.'/foo.txt', '/foo.txt');
$zip->close();
Expected result:
----------------
No errors
Actual result:
--------------
Error 19
#define ZIP_ER_NOZIP 19 /* N Not a zip archive */
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79296&edit=1