]> granicus.if.org Git - php/commitdiff
new test increases code coverage, fix memleak found by test
authorGreg Beaver <cellog@php.net>
Wed, 23 Apr 2008 18:30:53 +0000 (18:30 +0000)
committerGreg Beaver <cellog@php.net>
Wed, 23 Apr 2008 18:30:53 +0000 (18:30 +0000)
ext/phar/phar_object.c
ext/phar/tests/phar_convert_again.phpt [new file with mode: 0644]

index 294eee14662b39761afa980b3fc3681650cb56b3..bd07d96263dc86ad071579b40d4591addef3e981 100755 (executable)
@@ -1699,10 +1699,12 @@ static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool c
        efree(newname);
 
        if (zend_hash_exists(&(PHAR_GLOBALS->phar_fname_map), newpath, phar->fname_len)) {
+               efree(oldpath);
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Unable to add newly converted phar \"%s\" to the list of phars, a phar with that name already exists", phar->fname);
                return NULL;
        }
        if (SUCCESS != zend_hash_add(&(PHAR_GLOBALS->phar_fname_map), newpath, phar->fname_len, (void*)&phar, sizeof(phar_archive_data*), NULL)) {
+               efree(oldpath);
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Unable to add newly converted phar \"%s\" to the list of phars", phar->fname);
                return NULL;
        }
@@ -1729,6 +1731,7 @@ static zval *phar_rename_archive(phar_archive_data *phar, char *ext, zend_bool c
        if (error) {
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, error);
                efree(error);
+               efree(oldpath);
                return NULL;
        }
 
diff --git a/ext/phar/tests/phar_convert_again.phpt b/ext/phar/tests/phar_convert_again.phpt
new file mode 100644 (file)
index 0000000..bec5414
--- /dev/null
@@ -0,0 +1,60 @@
+--TEST--
+Phar::conversion to other formats
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+<?php if (!extension_loaded("zlib")) die("skip no zlib"); ?>
+<?php if (!extension_loaded("bz2")) die("skip no bz2"); ?>
+--INI--
+phar.require_hash=0
+phar.readonly=0
+--FILE--
+<?php
+
+$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar';
+$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '2.tbz';
+$pname = 'phar://' . $fname;
+$stub = '<?php echo "first stub\n"; __HALT_COMPILER(); ?>';
+$file = $stub;
+
+$files = array();
+$files['a'] = 'a';
+$files['b'] = 'b';
+$files['c'] = 'c';
+
+include 'files/phar_test.inc';
+
+$phar = new Phar($fname);
+$zip = $phar->convertToData(Phar::ZIP);
+echo $zip->getPath() . "\n";
+$tgz = $phar->convertToData(Phar::TAR, Phar::GZ);
+echo $tgz->getPath() . "\n";
+$tbz = $phar->convertToData(Phar::TAR, Phar::BZ2);
+echo $tbz->getPath() . "\n";
+try {
+$phar = $tbz->convertToExecutable(Phar::PHAR, Phar::NONE);
+} catch (Exception $e) {
+echo $e->getMessage() . "\n";
+}
+copy($tbz->getPath(), $fname2);
+$tbz = new PharData($fname2);
+$phar = $tbz->convertToExecutable(Phar::PHAR, Phar::NONE);
+echo $phar->getPath() . "\n";
+?>
+===DONE===
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.zip');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.tar.gz');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.tar.bz2');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '2.tbz');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '2.phar');
+__HALT_COMPILER();
+?>
+--EXPECTF--
+%sphar_convert_again.zip
+%sphar_convert_again.tar.gz
+%sphar_convert_again.tar.bz2
+Unable to add newly converted phar "%sphar_convert_again.phar" to the list of phars, a phar with that name already exists
+%sphar_convert_again2.phar
+===DONE===