From 785497c8ba40ac8493f123934c0c316712115628 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 25 Jun 2020 15:42:32 +0200 Subject: Fix leaks in Phar::webPhar() --- ext/phar/phar_object.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) (limited to 'ext/phar') diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 881ce96cf6..3c8ba60cf6 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -681,39 +681,30 @@ PHP_METHOD(Phar, webPhar) if (FAILURE == zend_fcall_info_init(rewrite, 0, &fci, &fcc, NULL, NULL)) { zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: invalid rewrite callback"); +cleanup_fail: + zval_ptr_dtor(¶ms); if (free_pathinfo) { efree(path_info); } + efree(entry); efree(pt); - RETURN_THROWS(); } fci.param_count = 1; fci.params = ¶ms; - Z_ADDREF(params); fci.retval = &retval; if (FAILURE == zend_call_function(&fci, &fcc)) { if (!EG(exception)) { zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: failed to call rewrite callback"); } - - if (free_pathinfo) { - efree(path_info); - } - efree(pt); - - RETURN_THROWS(); + goto cleanup_fail; } if (Z_TYPE_P(fci.retval) == IS_UNDEF || Z_TYPE(retval) == IS_UNDEF) { - if (free_pathinfo) { - efree(path_info); - } zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: rewrite callback must return a string or false"); - efree(pt); - RETURN_THROWS(); + goto cleanup_fail; } switch (Z_TYPE(retval)) { @@ -734,13 +725,8 @@ PHP_METHOD(Phar, webPhar) zend_bailout(); return; default: - if (free_pathinfo) { - efree(path_info); - } - efree(pt); - zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: rewrite callback must return a string or false"); - RETURN_THROWS(); + goto cleanup_fail; } } -- cgit v1.2.1