From dba1c11685c6968975f670b9c48f15f466d12107 Mon Sep 17 00:00:00 2001 From: Steph Fox Date: Mon, 12 May 2008 17:12:56 +0000 Subject: [PATCH] - Make sure default alias is set in phar.zip - Add test --- ext/phar/tests/zip/getalias.phpt | 59 ++++++++++++++++++++++++++++++++ ext/phar/zip.c | 9 ++++- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 ext/phar/tests/zip/getalias.phpt 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) { -- 2.50.1