- Make sure default alias is set in phar.zip

- Add test
This commit is contained in:
Steph Fox 2008-05-12 17:12:56 +00:00
parent 95c792c5d8
commit dba1c11685
2 changed files with 67 additions and 1 deletions

View file

@ -0,0 +1,59 @@
--TEST--
Phar: getAlias() with an existing phar.zip
--SKIPIF--
<?php if (!extension_loaded("phar")) die("skip"); ?>
--INI--
phar.readonly=0
--FILE--
<?php
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.zip';
// sanity check with a virgin phar.zip
$phar = new Phar($fname);
var_dump($phar->getAlias());
unset($phar);
copy(dirname(__FILE__) . '/files/metadata.phar.zip', $fname);
// existing phar.zip, no alias set
$phar = new Phar($fname);
var_dump($phar->getAlias());
// check that default alias can be overwritten
$phar->setAlias('jiminycricket');
var_dump($phar->getAlias());
unset($phar);
// existing phar.zip, alias set
$phar = new Phar($fname);
var_dump($phar->getAlias());
// check that alias can't be set manually
try {
$phar['.phar/alias.txt'] = 'pinocchio';
} catch (Exception $e) {
echo $e->getMessage()."\n";
}
var_dump($phar->getAlias());
// check that user-defined alias can be overwritten
$phar->setAlias('pinocchio');
var_dump($phar->getAlias());
?>
===DONE===
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.zip');
__HALT_COMPILER();
?>
--EXPECTF--
string(%d) "%sgetalias.phar.zip"
string(%d) "%sgetalias.phar.zip"
string(13) "jiminycricket"
string(13) "jiminycricket"
Cannot set alias ".phar/alias.txt" directly in phar "%sgetalias.phar.zip", use setAlias
string(13) "jiminycricket"
string(9) "pinocchio"
===DONE===

View file

@ -241,6 +241,13 @@ foundit:
mydata->ext_len = (mydata->fname + fname_len) - mydata->ext; mydata->ext_len = (mydata->fname + fname_len) - mydata->ext;
} }
} }
if (!alias_len) {
mydata->alias = estrndup(fname, fname_len);
#ifdef PHP_WIN32
phar_unixify_path_separators(mydata->alias, fname_len);
#endif
mydata->alias_len = fname_len;
}
/* clean up on big-endian systems */ /* clean up on big-endian systems */
/* seek to central directory */ /* seek to central directory */
php_stream_seek(fp, PHAR_GET_32(locator.cdir_offset), SEEK_SET); php_stream_seek(fp, PHAR_GET_32(locator.cdir_offset), SEEK_SET);
@ -269,7 +276,7 @@ foundit:
efree(mydata->alias); \ efree(mydata->alias); \
} \ } \
efree(mydata); \ efree(mydata); \
return FAILURE return FAILURE;
/* add each central directory item to the manifest */ /* add each central directory item to the manifest */
for (i = 0; i < locator.count; ++i) { for (i = 0; i < locator.count; ++i) {