From: Steph Fox Date: Mon, 12 May 2008 17:12:56 +0000 (+0000) Subject: - Make sure default alias is set in phar.zip X-Git-Tag: RELEASE_2_0_0b1~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dba1c11685c6968975f670b9c48f15f466d12107;p=php - Make sure default alias is set in phar.zip - Add test --- diff --git a/ext/phar/tests/zip/getalias.phpt b/ext/phar/tests/zip/getalias.phpt new file mode 100644 index 0000000000..9c917633c9 --- /dev/null +++ b/ext/phar/tests/zip/getalias.phpt @@ -0,0 +1,59 @@ +--TEST-- +Phar: getAlias() with an existing phar.zip +--SKIPIF-- + +--INI-- +phar.readonly=0 +--FILE-- +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-- + +--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=== diff --git a/ext/phar/zip.c b/ext/phar/zip.c index cb004bf9f9..55d06b589c 100644 --- a/ext/phar/zip.c +++ b/ext/phar/zip.c @@ -241,6 +241,13 @@ foundit: 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 */ /* seek to central directory */ php_stream_seek(fp, PHAR_GET_32(locator.cdir_offset), SEEK_SET); @@ -269,7 +276,7 @@ foundit: efree(mydata->alias); \ } \ efree(mydata); \ - return FAILURE + return FAILURE; /* add each central directory item to the manifest */ for (i = 0; i < locator.count; ++i) {