From: Greg Beaver Date: Sun, 20 Apr 2008 17:59:14 +0000 (+0000) Subject: add test for symbolic and hard links X-Git-Tag: RELEASE_2_0_0b1~298 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca6f70c8a38d276665b3adafac02693272322fa3;p=php add test for symbolic and hard links --- diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 38ba039f53..ca13e5ba1b 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -260,7 +260,7 @@ int phar_open_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, i if (entry.tar_type == TAR_LINK) { if (!zend_hash_exists(&myphar->manifest, hdr->linkname, strlen(hdr->linkname))) { if (error) { - spprintf(error, 4096, "phar error: \"%s\" is a corrupted tar file - symbolic link to non-existent file", fname); + spprintf(error, 4096, "phar error: \"%s\" is a corrupted tar file - hard link to non-existent file", fname); } efree(entry.filename); php_stream_close(fp); diff --git a/ext/phar/tests/tar/files/corrupt_tarmaker.php.inc b/ext/phar/tests/tar/files/corrupt_tarmaker.php.inc index 28fb8a48ea..d8b8bc20ac 100644 --- a/ext/phar/tests/tar/files/corrupt_tarmaker.php.inc +++ b/ext/phar/tests/tar/files/corrupt_tarmaker.php.inc @@ -60,6 +60,9 @@ class corrupt_tarmaker $type = 5; // Directory } else if ($stat['mode'] & 0x8000) { $type = 0; // Regular + } else if ($stat['mode'] & 0xA000 && $corrupt = 'symlink') { + $type = 2; // Symbolic Link + $link = 'file1.txt'; } else if ($stat['mode'] & 0xA000) { $type = 1; // Link $link = 'file1.txt'; diff --git a/ext/phar/tests/tar/links.phpt b/ext/phar/tests/tar/links.phpt new file mode 100644 index 0000000000..f1201a6209 --- /dev/null +++ b/ext/phar/tests/tar/links.phpt @@ -0,0 +1,48 @@ +--TEST-- +Phar: tar with hard link and symbolic link +--SKIPIF-- + +--FILE-- +init(); +$a->addFile('symlink', 'internal/file.txt', array( + 'mode' => 0xA000 + 0644, + 'uid' => 0, + 'gid' => 0, + 'size' => strlen('internal/file.txt'), + 'mtime' => time(), + ), 'symlink'); +$a->addFile('hardlink', 'internal/file.txt', array( + 'mode' => 0xA000 + 0644, + 'uid' => 0, + 'gid' => 0, + 'size' => strlen('internal/file.txt'), + 'mtime' => time(), + )); +$a->addFile('internal/file.txt', 'hi there'); +$a->close(); + +try { + $p = new PharData($fname); +} catch (Exception $e) { + echo $e->getMessage() . "\n"; +} +var_dump($p['symlink']->getContent()); +var_dump($p['hardlink']->getContent()); +var_dump($p['internal/file.txt']->getContent()); +?> +===DONE=== +--CLEAN-- + +--EXPECTF-- +string(17) "internal/file.txt" +string(17) "internal/file.txt" +string(8) "hi there" +===DONE===