summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2015-09-28 17:12:35 -0700
committerStanislav Malyshev <stas@php.net>2015-09-28 17:12:35 -0700
commite78ac461dbefb7c4a3e9fde78d50fbc56b7b0183 (patch)
tree78777613b84871cb241e5eba016a45ae6da7d0c9
parentd698f0ae51f67c9cce870b09c59df3d6ba959244 (diff)
downloadphp-git-e78ac461dbefb7c4a3e9fde78d50fbc56b7b0183.tar.gz
FIx bug #70433 - Uninitialized pointer in phar_make_dirstream when zip entry filename is "/"
-rw-r--r--ext/phar/dirstream.c2
-rw-r--r--ext/phar/tests/bug70433.phpt23
-rwxr-xr-xext/phar/tests/bug70433.zipbin0 -> 264 bytes
3 files changed, 24 insertions, 1 deletions
diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c
index 75cf049ade..4728e29f9c 100644
--- a/ext/phar/dirstream.c
+++ b/ext/phar/dirstream.c
@@ -207,7 +207,7 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
zend_hash_internal_pointer_reset(manifest);
while (FAILURE != zend_hash_has_more_elements(manifest)) {
- if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key_ex(manifest, &key, &keylen, &unused, 0, NULL)) {
+ if (HASH_KEY_IS_STRING != zend_hash_get_current_key_ex(manifest, &key, &keylen, &unused, 0, NULL)) {
break;
}
diff --git a/ext/phar/tests/bug70433.phpt b/ext/phar/tests/bug70433.phpt
new file mode 100644
index 0000000000..cbebb34c37
--- /dev/null
+++ b/ext/phar/tests/bug70433.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Phar - bug #70433 - Uninitialized pointer in phar_make_dirstream when zip entry filename is "/"
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--FILE--
+<?php
+$phar = new PharData(__DIR__."/bug70433.zip");
+var_dump($phar);
+$meta = $phar->getMetadata();
+var_dump($meta);
+?>
+DONE
+--EXPECTF--
+object(PharData)#1 (3) {
+ ["pathName":"SplFileInfo":private]=>
+ string(0) ""
+ ["glob":"DirectoryIterator":private]=>
+ bool(false)
+ ["subPathName":"RecursiveDirectoryIterator":private]=>
+ string(0) ""
+}
+NULL
+DONE
diff --git a/ext/phar/tests/bug70433.zip b/ext/phar/tests/bug70433.zip
new file mode 100755
index 0000000000..3994a30a8e
--- /dev/null
+++ b/ext/phar/tests/bug70433.zip
Binary files differ