Skip to content

Commit b406f7c

Browse files
committed
zip extension version 1.22.1
- add ZipArchive::FL_OPEN_FILE_NOW to open the file when added instead of waiting for archive to be closed
1 parent 071bf46 commit b406f7c

File tree

6 files changed

+53
-4
lines changed

6 files changed

+53
-4
lines changed

UPGRADING

+1
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ PHP 8.3 UPGRADE NOTES
314314
. ZipArchive::AFL_IS_TORRENTZIP (libzip >= 1.10)
315315
. ZipArchive::AFL_WANT_TORRENTZIP (libzip >= 1.10)
316316
. ZipArchive::AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE (libzip >= 1.10)
317+
. ZipArchive::FL_OPEN_FILE_NOW
317318

318319
========================================
319320
11. Changes to INI File Handling

ext/zip/php_zip.c

+11-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,17 @@ static int php_zip_add_file(ze_zip_object *obj, const char *filename, size_t fil
299299
return -1;
300300
}
301301

302-
zs = zip_source_file(obj->za, resolved_path, offset_start, offset_len);
302+
if (flags & ZIP_FL_OPEN_FILE_NOW) {
303+
FILE *fd;
304+
fd = fopen(resolved_path, "rb");
305+
if (!fd) {
306+
return -1;
307+
}
308+
flags ^= ZIP_FL_OPEN_FILE_NOW;
309+
zs = zip_source_filep(obj->za, fd, offset_start, offset_len);
310+
} else {
311+
zs = zip_source_file(obj->za, resolved_path, offset_start, offset_len);
312+
}
303313
if (!zs) {
304314
return -1;
305315
}

ext/zip/php_zip.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ extern zend_module_entry zip_module_entry;
3131
#define ZIP_OVERWRITE ZIP_TRUNCATE
3232
#endif
3333

34-
#define PHP_ZIP_VERSION "1.22.0"
34+
/* Additionnal flags not from libzip */
35+
#define ZIP_FL_OPEN_FILE_NOW (1u<<30)
36+
37+
#define PHP_ZIP_VERSION "1.22.1"
3538

3639
#ifdef HAVE_LIBZIP_VERSION
3740
#define LIBZIP_VERSION_STR zip_libzip_version()

ext/zip/php_zip.stub.php

+7
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,13 @@ class ZipArchive implements Countable
172172
*/
173173
public const FL_ENC_CP437 = UNKNOWN;
174174

175+
/**
176+
* Additionnal flags not from libzip
177+
* @var int
178+
* @cvalue ZIP_FL_OPEN_FILE_NOW
179+
*/
180+
public const FL_OPEN_FILE_NOW = UNKNOWN;
181+
175182
/**
176183
* @var int
177184
* @cvalue ZIP_CM_DEFAULT

ext/zip/php_zip_arginfo.h

+7-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/zip/tests/oo_addfile.phpt

+23-1
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,29 @@ if (!$zip->addFile($dirname . 'utils.inc', 'mini.txt', 12, 34)) {
2424
echo "failed\n";
2525
}
2626
var_dump($zip->lastId);
27+
if (!$zip->addFile($dirname . 'utils.inc', 'other.txt', 0, 0, ZipArchive::FL_OPEN_FILE_NOW)) {
28+
echo "failed\n";
29+
}
30+
var_dump($zip->lastId);
31+
$del = $dirname . '__tmp_oo_addfile.txt';
32+
file_put_contents($del, 'foo');
33+
if (!$zip->addFile($del, 'deleted.txt', 0, 0, ZipArchive::FL_OPEN_FILE_NOW)) {
34+
echo "failed\n";
35+
}
36+
if (substr(PHP_OS, 0, 3) != 'WIN') {
37+
unlink($del);
38+
}
39+
var_dump($zip->lastId);
2740
if ($zip->status == ZIPARCHIVE::ER_OK) {
2841
if (!verify_entries($zip, [
2942
"bar",
3043
"foobar/",
3144
"foobar/baz",
3245
"entry1.txt",
3346
"test.php",
34-
"mini.txt"
47+
"mini.txt",
48+
"other.txt",
49+
"deleted.txt"
3550
])) {
3651
echo "failed\n";
3752
} else {
@@ -46,12 +61,19 @@ if (!$zip->open($file)) {
4661
}
4762
var_dump(strlen($zip->getFromName('test.php')) == filesize($dirname . 'utils.inc'));
4863
var_dump(strlen($zip->getFromName('mini.txt')) == 34);
64+
var_dump(strlen($zip->getFromName('other.txt')) == filesize($dirname . 'utils.inc'));
65+
var_dump($zip->getFromName('deleted.txt') === "foo");
4966
@unlink($file);
67+
@unlink($del);
5068
?>
5169
--EXPECT--
5270
int(-1)
5371
int(4)
5472
int(5)
73+
int(6)
74+
int(7)
5575
OK
5676
bool(true)
5777
bool(true)
78+
bool(true)
79+
bool(true)

0 commit comments

Comments
 (0)