summaryrefslogtreecommitdiff
path: root/ext/zip
diff options
context:
space:
mode:
authorRemi Collet <remi@php.net>2020-02-28 10:21:19 +0100
committerRemi Collet <remi@php.net>2020-02-28 10:21:19 +0100
commit5b2d4c0eccafcd648e574012a1c5331d6e1b1a4f (patch)
tree28155f58e2135b41d0629cd6d78ce51bf3196f49 /ext/zip
parent2aecf3aba90941a2ac2642180f340e3b7118a13a (diff)
downloadphp-git-5b2d4c0eccafcd648e574012a1c5331d6e1b1a4f.tar.gz
Fix #79315 ZipArchive::addFile doesn't honor start/length parameters
Diffstat (limited to 'ext/zip')
-rw-r--r--ext/zip/php_zip.c3
-rw-r--r--ext/zip/tests/oo_addfile.phpt11
2 files changed, 13 insertions, 1 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index e607f0f077..f65f70621e 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -1824,7 +1824,8 @@ static ZIPARCHIVE_METHOD(addFile)
entry_name_len = ZSTR_LEN(filename);
}
- if (php_zip_add_file(intern, ZSTR_VAL(filename), ZSTR_LEN(filename), entry_name, entry_name_len, 0, 0) < 0) {
+ if (php_zip_add_file(intern, ZSTR_VAL(filename), ZSTR_LEN(filename),
+ entry_name, entry_name_len, offset_start, offset_len) < 0) {
RETURN_FALSE;
} else {
RETURN_TRUE;
diff --git a/ext/zip/tests/oo_addfile.phpt b/ext/zip/tests/oo_addfile.phpt
index b41e3dbf2c..37320de627 100644
--- a/ext/zip/tests/oo_addfile.phpt
+++ b/ext/zip/tests/oo_addfile.phpt
@@ -20,12 +20,20 @@ if (!$zip->open($file)) {
if (!$zip->addFile($dirname . 'utils.inc', 'test.php')) {
echo "failed\n";
}
+if (!$zip->addFile($dirname . 'utils.inc', 'mini.txt', 12, 34)) {
+ echo "failed\n";
+}
if ($zip->status == ZIPARCHIVE::ER_OK) {
dump_entries_name($zip);
$zip->close();
} else {
echo "failed\n";
}
+if (!$zip->open($file)) {
+ exit('failed');
+}
+var_dump(strlen($zip->getFromName('test.php')) == filesize($dirname . 'utils.inc'));
+var_dump(strlen($zip->getFromName('mini.txt')) == 34);
@unlink($file);
?>
--EXPECT--
@@ -34,3 +42,6 @@ if ($zip->status == ZIPARCHIVE::ER_OK) {
2 foobar/baz
3 entry1.txt
4 test.php
+5 mini.txt
+bool(true)
+bool(true)