diff --git a/ext/phar/zip.c b/ext/phar/zip.c index 9fe8492f639c..399ab9b8c418 100644 --- a/ext/phar/zip.c +++ b/ext/phar/zip.c @@ -345,28 +345,6 @@ int phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, char *alia entry.is_zip = 1; entry.fp_type = PHAR_FP; entry.is_persistent = mydata->is_persistent; -#define PHAR_ZIP_FAIL_FREE(errmsg, save) \ - zend_hash_destroy(&mydata->manifest); \ - HT_INVALIDATE(&mydata->manifest); \ - zend_hash_destroy(&mydata->mounted_dirs); \ - HT_INVALIDATE(&mydata->mounted_dirs); \ - zend_hash_destroy(&mydata->virtual_dirs); \ - HT_INVALIDATE(&mydata->virtual_dirs); \ - php_stream_close(fp); \ - phar_metadata_tracker_free(&mydata->metadata_tracker, mydata->is_persistent); \ - if (mydata->signature) { \ - efree(mydata->signature); \ - } \ - if (error) { \ - spprintf(error, 4096, "phar error: %s in zip-based phar \"%s\"", errmsg, mydata->fname); \ - } \ - pefree(mydata->fname, mydata->is_persistent); \ - if (mydata->alias) { \ - pefree(mydata->alias, mydata->is_persistent); \ - } \ - pefree(mydata, mydata->is_persistent); \ - efree(save); \ - return FAILURE; #define PHAR_ZIP_FAIL(errmsg) \ zend_hash_destroy(&mydata->manifest); \ HT_INVALIDATE(&mydata->manifest); \ @@ -522,14 +500,13 @@ int phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, char *alia mydata->sig_flags = PHAR_GET_32(sig); if (FAILURE == phar_verify_signature(sigfile, php_stream_tell(sigfile), mydata->sig_flags, sig + 8, entry.uncompressed_filesize - 8, fname, &mydata->signature, &sig_len, error)) { efree(sig); + php_stream_close(sigfile); if (error) { - char *save; - php_stream_close(sigfile); - spprintf(&save, 4096, "signature cannot be verified: %s", *error); + char errmsg[128]; + snprintf(errmsg, sizeof(errmsg), "signature cannot be verified: %s", *error); efree(*error); - PHAR_ZIP_FAIL_FREE(save, save); + PHAR_ZIP_FAIL(errmsg); } else { - php_stream_close(sigfile); PHAR_ZIP_FAIL("signature cannot be verified"); } }