From: Greg Beaver Date: Tue, 6 May 2008 21:23:48 +0000 (+0000) Subject: fix segfault in buildfromdirectory2 test and potential segfault X-Git-Tag: RELEASE_2_0_0b1~79 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=196f0ef42b4ee070c3faf0e317a11ca50100ba79;p=php fix segfault in buildfromdirectory2 test and potential segfault --- diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index d7a08cbb1d..cd7e9a2187 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -1595,7 +1595,7 @@ PHP_METHOD(Phar, buildFromDirectory) MAKE_STD_ZVAL(iter); if (SUCCESS != object_init_ex(iter, spl_ce_RecursiveDirectoryIterator)) { - zval_dtor(iter); + zval_ptr_dtor(&iter); zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Unable to instantiate directory iterator for %s", phar_obj->arc.archive->fname); RETURN_FALSE; } @@ -1606,10 +1606,15 @@ PHP_METHOD(Phar, buildFromDirectory) zend_call_method_with_1_params(&iter, spl_ce_RecursiveDirectoryIterator, &spl_ce_RecursiveDirectoryIterator->constructor, "__construct", NULL, &arg); + if (EG(exception)) { + zval_ptr_dtor(&iter); + RETURN_FALSE; + } + MAKE_STD_ZVAL(iteriter); if (SUCCESS != object_init_ex(iteriter, spl_ce_RecursiveIteratorIterator)) { - zval_dtor(iteriter); + zval_ptr_dtor(&iter); zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Unable to instantiate directory iterator for %s", phar_obj->arc.archive->fname); RETURN_FALSE; } @@ -1617,6 +1622,12 @@ PHP_METHOD(Phar, buildFromDirectory) zend_call_method_with_1_params(&iteriter, spl_ce_RecursiveIteratorIterator, &spl_ce_RecursiveIteratorIterator->constructor, "__construct", NULL, iter); + if (EG(exception)) { + zval_ptr_dtor(&iter); + zval_ptr_dtor(&iteriter); + RETURN_FALSE; + } + zval_ptr_dtor(&iter); if (regex_len > 0) {