summaryrefslogtreecommitdiff
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:29:50 +0100
commitd31fc591e0a852c69b81b3311b3609221f66c445 (patch)
treefcf19375a939b7839ce0fb943ea2263674b8bfc8
parent5b51b633e2509852312328d360639dacb35d12e6 (diff)
downloadphp-git-d31fc591e0a852c69b81b3311b3609221f66c445.tar.gz
Fix #79315 ZipArchive::addFile doesn't honor start/length parameters
-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)