summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--ext/zip/php_zip.c4
-rw-r--r--ext/zip/tests/bug72660.phpt20
3 files changed, 26 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 5a01565a85..841af54b18 100644
--- a/NEWS
+++ b/NEWS
@@ -96,6 +96,10 @@ PHP NEWS
- Wddx:
. Fixed bug #72564 (boolean always deserialized as "true") (Remi)
+- Zip:
+ . Fixed bug #72660 (NULL Pointer dereference in zend_virtual_cwd).
+ (Laruence)
+
21 Jul 2016 PHP 7.0.9
- Core:
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index bdcba78b21..b9f0bb73ac 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -1619,10 +1619,10 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
{
struct zip *intern;
zval *self = getThis();
- char *path = NULL;
+ char *path = ".";
char *remove_path = NULL;
char *add_path = NULL;
- size_t add_path_len, remove_path_len = 0, path_len = 0;
+ size_t add_path_len, remove_path_len = 0, path_len = 1;
zend_long remove_all_path = 0;
zend_long flags = 0;
zval *options = NULL;
diff --git a/ext/zip/tests/bug72660.phpt b/ext/zip/tests/bug72660.phpt
new file mode 100644
index 0000000000..af02b9b5a3
--- /dev/null
+++ b/ext/zip/tests/bug72660.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #72660 (NULL Pointer dereference in zend_virtual_cwd)
+--SKIPIF--
+<?php
+if(!extension_loaded('zip')) die('skip');
+if(PHP_ZTS == 0) { die('skip ZTS required'); }
+?>
+--FILE--
+<?php
+$zip = new ZipArchive();
+$zip->open(dirname(__FILE__) . "/bug72660.zip", ZIPARCHIVE::CREATE);
+$zip->addPattern("/noexists/");
+?>
+okey
+--CLEAN--
+<?php
+@unlink(dirname(__FILE__) . "/bug72660.zip");
+?>
+--EXPECT--
+okey