]> granicus.if.org Git - php/commitdiff
Fixed bug #72660 (NULL Pointer dereference in zend_virtual_cwd)
authorXinchen Hui <laruence@gmail.com>
Sun, 24 Jul 2016 15:58:22 +0000 (23:58 +0800)
committerXinchen Hui <laruence@gmail.com>
Sun, 24 Jul 2016 15:58:22 +0000 (23:58 +0800)
NEWS
ext/zip/php_zip.c
ext/zip/tests/bug72660.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 5a01565a8559e1e3f1ab560be57585865d2531d7..841af54b18bc707c4f08a3892a812ce647e08606 100644 (file)
--- 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:
index bdcba78b210d28a6508189f83c4bf9ec8e79c7d5..b9f0bb73ac798a7c7ee68459f9182792e85a0db2 100644 (file)
@@ -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 (file)
index 0000000..af02b9b
--- /dev/null
@@ -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