]> granicus.if.org Git - php/commitdiff
- Make sure default alias is set in phar.zip
authorSteph Fox <sfox@php.net>
Mon, 12 May 2008 17:12:56 +0000 (17:12 +0000)
committerSteph Fox <sfox@php.net>
Mon, 12 May 2008 17:12:56 +0000 (17:12 +0000)
- Add test

ext/phar/tests/zip/getalias.phpt [new file with mode: 0644]
ext/phar/zip.c

diff --git a/ext/phar/tests/zip/getalias.phpt b/ext/phar/tests/zip/getalias.phpt
new file mode 100644 (file)
index 0000000..9c91763
--- /dev/null
@@ -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===
index cb004bf9f904fa5c906caf03a0de2452696e0f3b..55d06b589cc8b8fc3f7a8718313b4564c17b6826 100644 (file)
@@ -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) {