]> granicus.if.org Git - php/commitdiff
fix segfault in buildfromdirectory2 test and potential segfault
authorGreg Beaver <cellog@php.net>
Tue, 6 May 2008 21:23:48 +0000 (21:23 +0000)
committerGreg Beaver <cellog@php.net>
Tue, 6 May 2008 21:23:48 +0000 (21:23 +0000)
ext/phar/phar_object.c

index d7a08cbb1d38f0581bc77350f41c436f0be81149..cd7e9a21873fb0c53b31bfde837fc53e7fda8b8b 100755 (executable)
@@ -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) {