diff options
author | Stanislav Malyshev <stas@php.net> | 2015-09-28 20:45:02 -0700 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2015-09-28 20:45:02 -0700 |
commit | 4c6f4863fad2a5a92cd367fb91a42afc36736ed3 (patch) | |
tree | 90352fc75328723c656dbf2b7daef916e31041f4 /ext/phar | |
parent | e7574a5329f8392726b1cbb85041ad86a18d6763 (diff) | |
parent | 51b23cd0f0b35e4748fac9ca19fb7825cf382ffd (diff) | |
download | php-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.c | 2 | ||||
-rw-r--r-- | ext/phar/tests/bug70433.phpt | 23 | ||||
-rwxr-xr-x | ext/phar/tests/bug70433.zip | bin | 0 -> 264 bytes | |||
-rw-r--r-- | ext/phar/util.c | 1 |
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 Binary files differnew file mode 100755 index 0000000000..3994a30a8e --- /dev/null +++ b/ext/phar/tests/bug70433.zip 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); |