summaryrefslogtreecommitdiff
path: root/ext/phar
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2015-09-28 20:45:02 -0700
committerStanislav Malyshev <stas@php.net>2015-09-28 20:45:02 -0700
commit4c6f4863fad2a5a92cd367fb91a42afc36736ed3 (patch)
tree90352fc75328723c656dbf2b7daef916e31041f4 /ext/phar
parente7574a5329f8392726b1cbb85041ad86a18d6763 (diff)
parent51b23cd0f0b35e4748fac9ca19fb7825cf382ffd (diff)
downloadphp-git-4c6f4863fad2a5a92cd367fb91a42afc36736ed3.tar.gz
Merge branch 'PHP-5.6' into PHP-7.0
* PHP-5.6: fix memory leak FIx bug #70433 - Uninitialized pointer in phar_make_dirstream when zip entry filename is "/" Conflicts: ext/phar/dirstream.c
Diffstat (limited to 'ext/phar')
-rw-r--r--ext/phar/dirstream.c2
-rw-r--r--ext/phar/tests/bug70433.phpt23
-rwxr-xr-xext/phar/tests/bug70433.zipbin0 -> 264 bytes
-rw-r--r--ext/phar/util.c1
4 files changed, 25 insertions, 1 deletions
diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c
index 6cb78ad692..1275c98d66 100644
--- a/ext/phar/dirstream.c
+++ b/ext/phar/dirstream.c
@@ -199,7 +199,7 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest) /* {{{ */
zend_hash_internal_pointer_reset(manifest);
while (FAILURE != zend_hash_has_more_elements(manifest)) {
- if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key(manifest, &str_key, &unused)) {
+ if (HASH_KEY_IS_STRING != zend_hash_get_current_key(manifest, &str_key, &unused)) {
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
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 54a928618b..f2f422ef62 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -495,6 +495,7 @@ really_get_entry:
if (entry->link) {
phar_entry_info *link = phar_get_link_source(entry);
if(!link) {
+ efree(*ret);
return FAILURE;
}
(*ret)->zero = phar_get_fp_offset(link);