From: Stanislav Malyshev Date: Tue, 7 Jul 2015 05:58:28 +0000 (-0700) Subject: Better fix for bug #69958 X-Git-Tag: php-7.0.0beta1~12^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3bee16a70ab38cebad36d6276dafaef40715cfe8;p=php Better fix for bug #69958 --- diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index ebb15f047a..dd65a08bbe 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -1996,9 +1996,10 @@ static int phar_copy_file_contents(phar_entry_info *entry, php_stream *fp) /* {{ } /* }}} */ -static zend_object *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool compress) /* {{{ */ +static zend_object *phar_rename_archive(phar_archive_data **sphar, char *ext, zend_bool compress) /* {{{ */ { const char *oldname = NULL; + phar_archive_data *phar = *sphar; char *oldpath = NULL; char *basename = NULL, *basepath = NULL; char *newname = NULL, *newpath = NULL; @@ -2108,6 +2109,7 @@ static zend_object *phar_rename_archive(phar_archive_data *phar, char *ext, zend pphar->fp = phar->fp; phar->fp = NULL; phar_destroy_phar_data(phar); + *sphar = NULL; phar = pphar; phar->refcount++; newpath = oldpath; @@ -2290,17 +2292,19 @@ no_copy: phar_add_virtual_dirs(phar, newentry.filename, newentry.filename_len); } ZEND_HASH_FOREACH_END(); - if ((ret = phar_rename_archive(phar, ext, 0))) { + if ((ret = phar_rename_archive(&phar, ext, 0))) { return ret; } else { - zend_hash_destroy(&(phar->manifest)); - zend_hash_destroy(&(phar->mounted_dirs)); - zend_hash_destroy(&(phar->virtual_dirs)); - if (phar->fp) { - php_stream_close(phar->fp); + if(phar != NULL) { + zend_hash_destroy(&(phar->manifest)); + zend_hash_destroy(&(phar->mounted_dirs)); + zend_hash_destroy(&(phar->virtual_dirs)); + if (phar->fp) { + php_stream_close(phar->fp); + } + efree(phar->fname); + efree(phar); } - efree(phar->fname); - efree(phar); return NULL; } }