diff options
author | Christoph M. Becker <cmb@php.net> | 2015-07-20 17:22:08 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2015-08-13 21:04:36 +0200 |
commit | c36ce04dd36c5d90363f843bc7fea1bb753cef93 (patch) | |
tree | aea3e41c37523d2f6b18838e4a252fcacaab39c6 /ext | |
parent | f9744a36a229c1647ca7a1dc7aa0dcb9edbc7793 (diff) | |
download | php-git-c36ce04dd36c5d90363f843bc7fea1bb753cef93.tar.gz |
Fix #70103: ZipArchive::addGlob ignores remove_all_path option
When the remove_all_path option is set, but no add_path option, remove_all_path
is simply ignored. This patch fixes this.
Diffstat (limited to 'ext')
-rw-r--r-- | ext/zip/php_zip.c | 4 | ||||
-rw-r--r-- | ext/zip/tests/bug70103.phpt | 34 |
2 files changed, 36 insertions, 2 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 672097dec5..f32d515b83 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -1691,8 +1691,8 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* entry_name = entry_name_buf; entry_name_len = strlen(entry_name); } else { - entry_name = Z_STRVAL_P(zval_file); - entry_name_len = Z_STRLEN_P(zval_file); + entry_name = file_stripped; + entry_name_len = file_stripped_len; } if (basename) { zend_string_release(basename); diff --git a/ext/zip/tests/bug70103.phpt b/ext/zip/tests/bug70103.phpt new file mode 100644 index 0000000000..7744532cfa --- /dev/null +++ b/ext/zip/tests/bug70103.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #70103 (ZipArchive::addGlob ignores remove_all_path option) +--SKIPIF-- +<?php +if (!extension_loaded('zip')) die('skip zip support not available'); +?> +--FILE-- +<?php +$dir = __DIR__ . '/bug70103'; + +mkdir($dir); chmod($dir, 0777); +file_put_contents($dir . '/foo.txt', 'foo'); + +$zip = new ZipArchive(); +$zip->open($dir . '/test.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE); +$zip->addGlob($dir . '/*.txt', GLOB_NOSORT, array('remove_all_path' => true)); +$zip->close(); + +$zip = new ZipArchive(); +$zip->open($dir . '/test.zip'); +var_dump($zip->numFiles); +var_dump($zip->getNameIndex(0)); +$zip->close(); +?> +--CLEAN-- +<?php +$dir = __DIR__ . '/bug70103'; +unlink($dir . '/foo.txt'); +unlink($dir . '/test.zip'); +rmdir($dir); +?> +--EXPECT-- +int(1) +string(7) "foo.txt" |